summaryrefslogtreecommitdiff
path: root/boost
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2016-10-06 01:38:45 (GMT)
committerDongHun Kwak <dh0128.kwak@samsung.com>2016-10-06 01:39:52 (GMT)
commit5cde13f21d36c7224b0e13d11c4b49379ae5210d (patch)
treee8269ac85a4b0f7d416e2565fa4f451b5cb41351 /boost
parentd9ec475d945d3035377a0d89ed42e382d8988891 (diff)
downloadboost-5cde13f21d36c7224b0e13d11c4b49379ae5210d.zip
boost-5cde13f21d36c7224b0e13d11c4b49379ae5210d.tar.gz
boost-5cde13f21d36c7224b0e13d11c4b49379ae5210d.tar.bz2
Imported Upstream version 1.61.0refs/changes/08/91108/1
Change-Id: I96a1f878d1e6164f01e9aadd5147f38fca448d90 Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
Diffstat (limited to 'boost')
-rw-r--r--boost/align.hpp2
-rw-r--r--boost/align/align.hpp2
-rw-r--r--boost/align/align_down.hpp27
-rw-r--r--boost/align/align_down_forward.hpp24
-rw-r--r--boost/align/align_up.hpp27
-rw-r--r--boost/align/align_up_forward.hpp24
-rw-r--r--boost/align/aligned_alloc.hpp6
-rw-r--r--boost/align/aligned_allocator.hpp45
-rw-r--r--boost/align/aligned_allocator_adaptor.hpp57
-rw-r--r--boost/align/aligned_delete.hpp6
-rw-r--r--boost/align/aligned_delete_forward.hpp4
-rw-r--r--boost/align/alignment_of.hpp13
-rw-r--r--boost/align/detail/address.hpp29
-rw-r--r--boost/align/detail/align.hpp24
-rw-r--r--boost/align/detail/align_down.hpp29
-rw-r--r--boost/align/detail/align_up.hpp29
-rw-r--r--boost/align/detail/aligned_alloc.hpp30
-rw-r--r--boost/align/detail/aligned_alloc_android.hpp4
-rw-r--r--boost/align/detail/aligned_alloc_macos.hpp4
-rw-r--r--boost/align/detail/aligned_alloc_msvc.hpp4
-rw-r--r--boost/align/detail/aligned_alloc_posix.hpp4
-rw-r--r--boost/align/detail/aligned_alloc_sunos.hpp4
-rw-r--r--boost/align/detail/assume_aligned.hpp2
-rw-r--r--boost/align/detail/assume_aligned_clang.hpp6
-rw-r--r--boost/align/detail/assume_aligned_gcc.hpp4
-rw-r--r--boost/align/detail/assume_aligned_intel.hpp4
-rw-r--r--boost/align/detail/assume_aligned_msvc.hpp6
-rw-r--r--boost/align/detail/element_type.hpp (renamed from boost/align/detail/remove_traits.hpp)26
-rw-r--r--boost/align/detail/is_aligned.hpp15
-rw-r--r--boost/align/detail/max_align.hpp1
-rw-r--r--boost/align/is_aligned.hpp13
-rw-r--r--boost/align/is_aligned_forward.hpp24
-rw-r--r--boost/archive/add_facet.hpp55
-rw-r--r--boost/archive/basic_binary_iprimitive.hpp20
-rw-r--r--boost/archive/basic_binary_oprimitive.hpp25
-rw-r--r--boost/archive/basic_streambuf_locale_saver.hpp63
-rw-r--r--boost/archive/basic_text_iprimitive.hpp25
-rw-r--r--boost/archive/basic_text_oprimitive.hpp21
-rw-r--r--boost/archive/basic_xml_iarchive.hpp24
-rw-r--r--boost/archive/basic_xml_oarchive.hpp31
-rw-r--r--boost/archive/binary_iarchive_impl.hpp5
-rw-r--r--boost/archive/binary_oarchive_impl.hpp5
-rw-r--r--boost/archive/codecvt_null.hpp4
-rw-r--r--boost/archive/detail/basic_serializer.hpp4
-rw-r--r--boost/archive/detail/common_iarchive.hpp2
-rw-r--r--boost/archive/detail/common_oarchive.hpp3
-rw-r--r--boost/archive/detail/decl.hpp4
-rw-r--r--boost/archive/detail/iserializer.hpp14
-rw-r--r--boost/archive/detail/oserializer.hpp1
-rw-r--r--boost/archive/detail/utf8_codecvt_facet.hpp17
-rw-r--r--boost/archive/impl/basic_binary_iprimitive.ipp53
-rw-r--r--boost/archive/impl/basic_binary_oprimitive.ipp50
-rw-r--r--boost/archive/impl/basic_text_iprimitive.ipp29
-rw-r--r--boost/archive/impl/basic_text_oprimitive.ipp32
-rw-r--r--boost/archive/impl/basic_xml_grammar.hpp2
-rw-r--r--boost/archive/impl/basic_xml_iarchive.ipp3
-rw-r--r--boost/archive/impl/basic_xml_oarchive.ipp18
-rw-r--r--boost/archive/impl/text_oarchive_impl.ipp2
-rw-r--r--boost/archive/impl/xml_iarchive_impl.ipp24
-rw-r--r--boost/archive/impl/xml_oarchive_impl.ipp25
-rw-r--r--boost/archive/impl/xml_wiarchive_impl.ipp28
-rw-r--r--boost/archive/impl/xml_woarchive_impl.ipp44
-rw-r--r--boost/archive/iterators/dataflow.hpp1
-rw-r--r--boost/archive/iterators/istream_iterator.hpp15
-rw-r--r--boost/archive/iterators/mb_from_wchar.hpp32
-rw-r--r--boost/archive/iterators/wchar_from_mb.hpp144
-rw-r--r--boost/archive/text_iarchive.hpp11
-rw-r--r--boost/archive/text_oarchive.hpp14
-rw-r--r--boost/archive/xml_iarchive.hpp14
-rw-r--r--boost/archive/xml_oarchive.hpp52
-rw-r--r--boost/archive/xml_wiarchive.hpp24
-rw-r--r--boost/archive/xml_woarchive.hpp51
-rw-r--r--boost/atomic/detail/ops_emulated.hpp2
-rw-r--r--boost/atomic/detail/ops_gcc_x86_dcas.hpp2
-rw-r--r--boost/bimap/detail/debug/static_error.hpp1
-rw-r--r--boost/compute.hpp44
-rw-r--r--boost/compute/algorithm.hpp94
-rw-r--r--boost/compute/algorithm/accumulate.hpp184
-rw-r--r--boost/compute/algorithm/adjacent_difference.hpp98
-rw-r--r--boost/compute/algorithm/adjacent_find.hpp162
-rw-r--r--boost/compute/algorithm/all_of.hpp36
-rw-r--r--boost/compute/algorithm/any_of.hpp40
-rw-r--r--boost/compute/algorithm/binary_search.hpp37
-rw-r--r--boost/compute/algorithm/copy.hpp362
-rw-r--r--boost/compute/algorithm/copy_if.hpp58
-rw-r--r--boost/compute/algorithm/copy_n.hpp51
-rw-r--r--boost/compute/algorithm/count.hpp55
-rw-r--r--boost/compute/algorithm/count_if.hpp62
-rw-r--r--boost/compute/algorithm/detail/balanced_path.hpp162
-rw-r--r--boost/compute/algorithm/detail/binary_find.hpp133
-rw-r--r--boost/compute/algorithm/detail/compact.hpp77
-rw-r--r--boost/compute/algorithm/detail/copy_on_device.hpp190
-rw-r--r--boost/compute/algorithm/detail/copy_to_device.hpp127
-rw-r--r--boost/compute/algorithm/detail/copy_to_host.hpp137
-rw-r--r--boost/compute/algorithm/detail/count_if_with_ballot.hpp78
-rw-r--r--boost/compute/algorithm/detail/count_if_with_reduce.hpp87
-rw-r--r--boost/compute/algorithm/detail/count_if_with_threads.hpp129
-rw-r--r--boost/compute/algorithm/detail/find_extrema.hpp64
-rw-r--r--boost/compute/algorithm/detail/find_extrema_with_atomics.hpp108
-rw-r--r--boost/compute/algorithm/detail/find_extrema_with_reduce.hpp443
-rw-r--r--boost/compute/algorithm/detail/find_if_with_atomics.hpp212
-rw-r--r--boost/compute/algorithm/detail/inplace_reduce.hpp136
-rw-r--r--boost/compute/algorithm/detail/insertion_sort.hpp165
-rw-r--r--boost/compute/algorithm/detail/merge_path.hpp116
-rw-r--r--boost/compute/algorithm/detail/merge_sort_on_cpu.hpp366
-rw-r--r--boost/compute/algorithm/detail/merge_with_merge_path.hpp203
-rw-r--r--boost/compute/algorithm/detail/radix_sort.hpp415
-rw-r--r--boost/compute/algorithm/detail/random_fill.hpp57
-rw-r--r--boost/compute/algorithm/detail/reduce_by_key.hpp119
-rw-r--r--boost/compute/algorithm/detail/reduce_by_key_with_scan.hpp541
-rw-r--r--boost/compute/algorithm/detail/reduce_on_gpu.hpp286
-rw-r--r--boost/compute/algorithm/detail/scan.hpp45
-rw-r--r--boost/compute/algorithm/detail/scan_on_cpu.hpp103
-rw-r--r--boost/compute/algorithm/detail/scan_on_gpu.hpp331
-rw-r--r--boost/compute/algorithm/detail/search_all.hpp86
-rw-r--r--boost/compute/algorithm/detail/serial_accumulate.hpp56
-rw-r--r--boost/compute/algorithm/detail/serial_count_if.hpp68
-rw-r--r--boost/compute/algorithm/detail/serial_find_extrema.hpp87
-rw-r--r--boost/compute/algorithm/detail/serial_merge.hpp97
-rw-r--r--boost/compute/algorithm/detail/serial_reduce.hpp62
-rw-r--r--boost/compute/algorithm/detail/serial_reduce_by_key.hpp108
-rw-r--r--boost/compute/algorithm/equal.hpp53
-rw-r--r--boost/compute/algorithm/equal_range.hpp42
-rw-r--r--boost/compute/algorithm/exclusive_scan.hpp96
-rw-r--r--boost/compute/algorithm/fill.hpp306
-rw-r--r--boost/compute/algorithm/fill_n.hpp36
-rw-r--r--boost/compute/algorithm/find.hpp57
-rw-r--r--boost/compute/algorithm/find_end.hpp119
-rw-r--r--boost/compute/algorithm/find_if.hpp35
-rw-r--r--boost/compute/algorithm/find_if_not.hpp43
-rw-r--r--boost/compute/algorithm/for_each.hpp65
-rw-r--r--boost/compute/algorithm/for_each_n.hpp35
-rw-r--r--boost/compute/algorithm/gather.hpp84
-rw-r--r--boost/compute/algorithm/generate.hpp49
-rw-r--r--boost/compute/algorithm/generate_n.hpp35
-rw-r--r--boost/compute/algorithm/includes.hpp155
-rw-r--r--boost/compute/algorithm/inclusive_scan.hpp81
-rw-r--r--boost/compute/algorithm/inner_product.hpp93
-rw-r--r--boost/compute/algorithm/inplace_merge.hpp60
-rw-r--r--boost/compute/algorithm/iota.hpp48
-rw-r--r--boost/compute/algorithm/is_partitioned.hpp43
-rw-r--r--boost/compute/algorithm/is_permutation.hpp67
-rw-r--r--boost/compute/algorithm/is_sorted.hpp64
-rw-r--r--boost/compute/algorithm/lexicographical_compare.hpp117
-rw-r--r--boost/compute/algorithm/lower_bound.hpp44
-rw-r--r--boost/compute/algorithm/max_element.hpp74
-rw-r--r--boost/compute/algorithm/merge.hpp105
-rw-r--r--boost/compute/algorithm/min_element.hpp74
-rw-r--r--boost/compute/algorithm/minmax_element.hpp70
-rw-r--r--boost/compute/algorithm/mismatch.hpp89
-rw-r--r--boost/compute/algorithm/next_permutation.hpp170
-rw-r--r--boost/compute/algorithm/none_of.hpp36
-rw-r--r--boost/compute/algorithm/nth_element.hpp87
-rw-r--r--boost/compute/algorithm/partial_sum.hpp37
-rw-r--r--boost/compute/algorithm/partition.hpp39
-rw-r--r--boost/compute/algorithm/partition_copy.hpp63
-rw-r--r--boost/compute/algorithm/partition_point.hpp46
-rw-r--r--boost/compute/algorithm/prev_permutation.hpp170
-rw-r--r--boost/compute/algorithm/random_shuffle.hpp75
-rw-r--r--boost/compute/algorithm/reduce.hpp301
-rw-r--r--boost/compute/algorithm/reduce_by_key.hpp118
-rw-r--r--boost/compute/algorithm/remove.hpp54
-rw-r--r--boost/compute/algorithm/remove_if.hpp47
-rw-r--r--boost/compute/algorithm/replace.hpp90
-rw-r--r--boost/compute/algorithm/replace_copy.hpp62
-rw-r--r--boost/compute/algorithm/reverse.hpp74
-rw-r--r--boost/compute/algorithm/reverse_copy.hpp79
-rw-r--r--boost/compute/algorithm/rotate.hpp54
-rw-r--r--boost/compute/algorithm/rotate_copy.hpp41
-rw-r--r--boost/compute/algorithm/scatter.hpp99
-rw-r--r--boost/compute/algorithm/scatter_if.hpp119
-rw-r--r--boost/compute/algorithm/search.hpp73
-rw-r--r--boost/compute/algorithm/search_n.hpp140
-rw-r--r--boost/compute/algorithm/set_difference.hpp182
-rw-r--r--boost/compute/algorithm/set_intersection.hpp170
-rw-r--r--boost/compute/algorithm/set_symmetric_difference.hpp194
-rw-r--r--boost/compute/algorithm/set_union.hpp195
-rw-r--r--boost/compute/algorithm/sort.hpp194
-rw-r--r--boost/compute/algorithm/sort_by_key.hpp156
-rw-r--r--boost/compute/algorithm/stable_partition.hpp72
-rw-r--r--boost/compute/algorithm/stable_sort.hpp99
-rw-r--r--boost/compute/algorithm/stable_sort_by_key.hpp61
-rw-r--r--boost/compute/algorithm/swap_ranges.hpp44
-rw-r--r--boost/compute/algorithm/transform.hpp76
-rw-r--r--boost/compute/algorithm/transform_if.hpp117
-rw-r--r--boost/compute/algorithm/transform_reduce.hpp89
-rw-r--r--boost/compute/algorithm/unique.hpp66
-rw-r--r--boost/compute/algorithm/unique_copy.hpp164
-rw-r--r--boost/compute/algorithm/upper_bound.hpp43
-rw-r--r--boost/compute/allocator.hpp21
-rw-r--r--boost/compute/allocator/buffer_allocator.hpp118
-rw-r--r--boost/compute/allocator/pinned_allocator.hpp53
-rw-r--r--boost/compute/async.hpp21
-rw-r--r--boost/compute/async/future.hpp166
-rw-r--r--boost/compute/async/wait.hpp56
-rw-r--r--boost/compute/async/wait_guard.hpp63
-rw-r--r--boost/compute/buffer.hpp227
-rw-r--r--boost/compute/cl.hpp20
-rw-r--r--boost/compute/cl_ext.hpp20
-rw-r--r--boost/compute/closure.hpp347
-rw-r--r--boost/compute/command_queue.hpp1881
-rw-r--r--boost/compute/config.hpp70
-rw-r--r--boost/compute/container.hpp27
-rw-r--r--boost/compute/container/array.hpp281
-rw-r--r--boost/compute/container/basic_string.hpp331
-rw-r--r--boost/compute/container/detail/scalar.hpp61
-rw-r--r--boost/compute/container/dynamic_bitset.hpp237
-rw-r--r--boost/compute/container/flat_map.hpp406
-rw-r--r--boost/compute/container/flat_set.hpp339
-rw-r--r--boost/compute/container/mapped_view.hpp250
-rw-r--r--boost/compute/container/stack.hpp81
-rw-r--r--boost/compute/container/string.hpp25
-rw-r--r--boost/compute/container/valarray.hpp499
-rw-r--r--boost/compute/container/vector.hpp761
-rw-r--r--boost/compute/context.hpp245
-rw-r--r--boost/compute/core.hpp32
-rw-r--r--boost/compute/detail/assert_cl_success.hpp24
-rw-r--r--boost/compute/detail/buffer_value.hpp178
-rw-r--r--boost/compute/detail/device_ptr.hpp215
-rw-r--r--boost/compute/detail/diagnostic.hpp112
-rw-r--r--boost/compute/detail/duration.hpp50
-rw-r--r--boost/compute/detail/get_object_info.hpp216
-rw-r--r--boost/compute/detail/getenv.hpp36
-rw-r--r--boost/compute/detail/global_static.hpp37
-rw-r--r--boost/compute/detail/is_buffer_iterator.hpp30
-rw-r--r--boost/compute/detail/is_contiguous_iterator.hpp118
-rw-r--r--boost/compute/detail/iterator_plus_distance.hpp53
-rw-r--r--boost/compute/detail/iterator_range_size.hpp44
-rw-r--r--boost/compute/detail/iterator_traits.hpp35
-rw-r--r--boost/compute/detail/literal.hpp45
-rw-r--r--boost/compute/detail/lru_cache.hpp139
-rw-r--r--boost/compute/detail/meta_kernel.hpp1054
-rw-r--r--boost/compute/detail/mpl_vector_to_tuple.hpp65
-rw-r--r--boost/compute/detail/nvidia_compute_capability.hpp60
-rw-r--r--boost/compute/detail/parameter_cache.hpp215
-rw-r--r--boost/compute/detail/path.hpp73
-rw-r--r--boost/compute/detail/print_range.hpp82
-rw-r--r--boost/compute/detail/read_write_single_value.hpp77
-rw-r--r--boost/compute/detail/sha1.hpp53
-rw-r--r--boost/compute/detail/variadic_macros.hpp35
-rw-r--r--boost/compute/detail/vendor.hpp38
-rw-r--r--boost/compute/detail/work_size.hpp37
-rw-r--r--boost/compute/device.hpp584
-rw-r--r--boost/compute/event.hpp338
-rw-r--r--boost/compute/exception.hpp23
-rw-r--r--boost/compute/exception/context_error.hpp88
-rw-r--r--boost/compute/exception/no_device_found.hpp48
-rw-r--r--boost/compute/exception/opencl_error.hpp158
-rw-r--r--boost/compute/exception/unsupported_extension_error.hpp71
-rw-r--r--boost/compute/experimental/clamp_range.hpp49
-rw-r--r--boost/compute/experimental/malloc.hpp51
-rw-r--r--boost/compute/experimental/sort_by_transform.hpp66
-rw-r--r--boost/compute/experimental/tabulate.hpp44
-rw-r--r--boost/compute/function.hpp454
-rw-r--r--boost/compute/functional.hpp34
-rw-r--r--boost/compute/functional/as.hpp51
-rw-r--r--boost/compute/functional/atomic.hpp141
-rw-r--r--boost/compute/functional/bind.hpp261
-rw-r--r--boost/compute/functional/common.hpp29
-rw-r--r--boost/compute/functional/convert.hpp51
-rw-r--r--boost/compute/functional/detail/macros.hpp35
-rw-r--r--boost/compute/functional/detail/nvidia_ballot.hpp48
-rw-r--r--boost/compute/functional/detail/nvidia_popcount.hpp42
-rw-r--r--boost/compute/functional/detail/unpack.hpp143
-rw-r--r--boost/compute/functional/field.hpp86
-rw-r--r--boost/compute/functional/geometry.hpp32
-rw-r--r--boost/compute/functional/get.hpp76
-rw-r--r--boost/compute/functional/hash.hpp91
-rw-r--r--boost/compute/functional/identity.hpp64
-rw-r--r--boost/compute/functional/integer.hpp30
-rw-r--r--boost/compute/functional/logical.hpp208
-rw-r--r--boost/compute/functional/math.hpp80
-rw-r--r--boost/compute/functional/operator.hpp100
-rw-r--r--boost/compute/functional/popcount.hpp55
-rw-r--r--boost/compute/functional/relational.hpp39
-rw-r--r--boost/compute/image.hpp25
-rw-r--r--boost/compute/image/image1d.hpp204
-rw-r--r--boost/compute/image/image2d.hpp262
-rw-r--r--boost/compute/image/image3d.hpp265
-rw-r--r--boost/compute/image/image_format.hpp135
-rw-r--r--boost/compute/image/image_object.hpp170
-rw-r--r--boost/compute/image/image_sampler.hpp221
-rw-r--r--boost/compute/image2d.hpp12
-rw-r--r--boost/compute/image3d.hpp12
-rw-r--r--boost/compute/image_format.hpp12
-rw-r--r--boost/compute/image_sampler.hpp12
-rw-r--r--boost/compute/interop/eigen.hpp16
-rw-r--r--boost/compute/interop/eigen/core.hpp72
-rw-r--r--boost/compute/interop/opencv.hpp17
-rw-r--r--boost/compute/interop/opencv/core.hpp141
-rw-r--r--boost/compute/interop/opencv/highgui.hpp33
-rw-r--r--boost/compute/interop/opencv/ocl.hpp51
-rw-r--r--boost/compute/interop/opengl.hpp24
-rw-r--r--boost/compute/interop/opengl/acquire.hpp99
-rw-r--r--boost/compute/interop/opengl/cl_gl.hpp20
-rw-r--r--boost/compute/interop/opengl/cl_gl_ext.hpp20
-rw-r--r--boost/compute/interop/opengl/context.hpp135
-rw-r--r--boost/compute/interop/opengl/gl.hpp20
-rw-r--r--boost/compute/interop/opengl/opengl_buffer.hpp106
-rw-r--r--boost/compute/interop/opengl/opengl_renderbuffer.hpp129
-rw-r--r--boost/compute/interop/opengl/opengl_texture.hpp133
-rw-r--r--boost/compute/interop/qt.hpp17
-rw-r--r--boost/compute/interop/qt/qimage.hpp69
-rw-r--r--boost/compute/interop/qt/qpoint.hpp20
-rw-r--r--boost/compute/interop/qt/qpointf.hpp20
-rw-r--r--boost/compute/interop/qt/qtcore.hpp18
-rw-r--r--boost/compute/interop/qt/qtgui.hpp16
-rw-r--r--boost/compute/interop/qt/qvector.hpp48
-rw-r--r--boost/compute/interop/vtk.hpp19
-rw-r--r--boost/compute/interop/vtk/bounds.hpp59
-rw-r--r--boost/compute/interop/vtk/data_array.hpp65
-rw-r--r--boost/compute/interop/vtk/matrix4x4.hpp46
-rw-r--r--boost/compute/interop/vtk/points.hpp55
-rw-r--r--boost/compute/iterator.hpp28
-rw-r--r--boost/compute/iterator/buffer_iterator.hpp280
-rw-r--r--boost/compute/iterator/constant_buffer_iterator.hpp209
-rw-r--r--boost/compute/iterator/constant_iterator.hpp171
-rw-r--r--boost/compute/iterator/counting_iterator.hpp185
-rw-r--r--boost/compute/iterator/detail/get_base_iterator_buffer.hpp52
-rw-r--r--boost/compute/iterator/detail/swizzle_iterator.hpp188
-rw-r--r--boost/compute/iterator/discard_iterator.hpp170
-rw-r--r--boost/compute/iterator/function_input_iterator.hpp186
-rw-r--r--boost/compute/iterator/permutation_iterator.hpp192
-rw-r--r--boost/compute/iterator/strided_iterator.hpp296
-rw-r--r--boost/compute/iterator/transform_iterator.hpp227
-rw-r--r--boost/compute/iterator/zip_iterator.hpp316
-rw-r--r--boost/compute/kernel.hpp394
-rw-r--r--boost/compute/lambda.hpp22
-rw-r--r--boost/compute/lambda/context.hpp329
-rw-r--r--boost/compute/lambda/functional.hpp242
-rw-r--r--boost/compute/lambda/get.hpp148
-rw-r--r--boost/compute/lambda/make_pair.hpp70
-rw-r--r--boost/compute/lambda/make_tuple.hpp127
-rw-r--r--boost/compute/lambda/placeholder.hpp28
-rw-r--r--boost/compute/lambda/placeholders.hpp93
-rw-r--r--boost/compute/lambda/result_of.hpp113
-rw-r--r--boost/compute/memory.hpp21
-rw-r--r--boost/compute/memory/local_buffer.hpp91
-rw-r--r--boost/compute/memory/svm_ptr.hpp81
-rw-r--r--boost/compute/memory_object.hpp264
-rw-r--r--boost/compute/pipe.hpp154
-rw-r--r--boost/compute/platform.hpp235
-rw-r--r--boost/compute/program.hpp650
-rw-r--r--boost/compute/random.hpp28
-rw-r--r--boost/compute/random/bernoulli_distribution.hpp92
-rw-r--r--boost/compute/random/default_random_engine.hpp24
-rw-r--r--boost/compute/random/discrete_distribution.hpp117
-rw-r--r--boost/compute/random/linear_congruential_engine.hpp238
-rw-r--r--boost/compute/random/mersenne_twister_engine.hpp254
-rw-r--r--boost/compute/random/normal_distribution.hpp124
-rw-r--r--boost/compute/random/threefry_engine.hpp311
-rw-r--r--boost/compute/random/uniform_int_distribution.hpp111
-rw-r--r--boost/compute/random/uniform_real_distribution.hpp105
-rw-r--r--boost/compute/source.hpp12
-rw-r--r--boost/compute/svm.hpp62
-rw-r--r--boost/compute/system.hpp278
-rw-r--r--boost/compute/type_traits.hpp25
-rw-r--r--boost/compute/type_traits/common_type.hpp55
-rw-r--r--boost/compute/type_traits/detail/capture_traits.hpp33
-rw-r--r--boost/compute/type_traits/is_device_iterator.hpp39
-rw-r--r--boost/compute/type_traits/is_fundamental.hpp58
-rw-r--r--boost/compute/type_traits/is_vector_type.hpp38
-rw-r--r--boost/compute/type_traits/make_vector_type.hpp71
-rw-r--r--boost/compute/type_traits/result_of.hpp39
-rw-r--r--boost/compute/type_traits/scalar_type.hpp72
-rw-r--r--boost/compute/type_traits/type_definition.hpp39
-rw-r--r--boost/compute/type_traits/type_name.hpp124
-rw-r--r--boost/compute/type_traits/vector_size.hpp65
-rw-r--r--boost/compute/types.hpp24
-rw-r--r--boost/compute/types/builtin.hpp12
-rw-r--r--boost/compute/types/complex.hpp196
-rw-r--r--boost/compute/types/fundamental.hpp172
-rw-r--r--boost/compute/types/pair.hpp117
-rw-r--r--boost/compute/types/struct.hpp173
-rw-r--r--boost/compute/types/tuple.hpp220
-rw-r--r--boost/compute/user_event.hpp88
-rw-r--r--boost/compute/utility.hpp21
-rw-r--r--boost/compute/utility/dim.hpp76
-rw-r--r--boost/compute/utility/extents.hpp164
-rw-r--r--boost/compute/utility/invoke.hpp71
-rw-r--r--boost/compute/utility/program_cache.hpp172
-rw-r--r--boost/compute/utility/source.hpp39
-rw-r--r--boost/compute/utility/wait_list.hpp203
-rw-r--r--boost/compute/version.hpp18
-rw-r--r--boost/compute/wait_list.hpp12
-rw-r--r--boost/config/compiler/clang.hpp15
-rw-r--r--boost/config/compiler/gcc.hpp21
-rw-r--r--boost/config/compiler/intel.hpp10
-rw-r--r--boost/config/compiler/nvcc.hpp8
-rw-r--r--boost/config/stdlib/libcpp.hpp18
-rw-r--r--boost/container/allocator_traits.hpp7
-rw-r--r--boost/container/deque.hpp40
-rw-r--r--boost/container/detail/config_begin.hpp2
-rw-r--r--boost/container/detail/iterators.hpp72
-rw-r--r--boost/container/detail/node_alloc_holder.hpp50
-rw-r--r--boost/container/detail/pair.hpp10
-rw-r--r--boost/container/detail/tree.hpp75
-rw-r--r--boost/container/detail/workaround.hpp13
-rw-r--r--boost/container/map.hpp39
-rw-r--r--boost/container/small_vector.hpp172
-rw-r--r--boost/container/static_vector.hpp53
-rw-r--r--boost/container/throw_exception.hpp1
-rw-r--r--boost/container/vector.hpp216
-rw-r--r--boost/context/all.hpp4
-rw-r--r--boost/context/detail/apply.hpp55
-rw-r--r--boost/context/detail/config.hpp59
-rw-r--r--boost/context/detail/disable_overload.hpp40
-rw-r--r--boost/context/detail/exception.hpp36
-rw-r--r--boost/context/detail/exchange.hpp36
-rw-r--r--boost/context/detail/fcontext.hpp (renamed from boost/context/fcontext.hpp)31
-rw-r--r--boost/context/detail/index_sequence.hpp72
-rw-r--r--boost/context/detail/invoke.hpp58
-rw-r--r--boost/context/detail/tuple.hpp129
-rw-r--r--boost/context/execution_context.hpp12
-rw-r--r--boost/context/execution_context.ipp452
-rw-r--r--boost/context/execution_context_v1.hpp487
-rw-r--r--boost/context/execution_context_v2.hpp395
-rw-r--r--boost/context/execution_context_v2_void.ipp290
-rw-r--r--boost/context/execution_context_winfib.ipp361
-rw-r--r--boost/context/fixedsize_stack.hpp11
-rw-r--r--boost/context/flags.hpp28
-rw-r--r--boost/context/pooled_fixedsize_stack.hpp115
-rw-r--r--boost/context/posix/protected_fixedsize_stack.hpp4
-rw-r--r--boost/context/posix/segmented_stack.hpp4
-rw-r--r--boost/context/preallocated.hpp39
-rw-r--r--boost/context/stack_context.hpp55
-rw-r--r--boost/context/stack_traits.hpp10
-rw-r--r--boost/context/windows/protected_fixedsize_stack.hpp10
-rw-r--r--boost/core/demangle.hpp5
-rw-r--r--boost/core/scoped_enum.hpp56
-rw-r--r--boost/coroutine/attributes.hpp44
-rw-r--r--boost/coroutine/detail/config.hpp8
-rw-r--r--boost/coroutine/detail/coroutine_context.hpp19
-rw-r--r--boost/coroutine/detail/data.hpp34
-rw-r--r--boost/coroutine/detail/flags.hpp3
-rw-r--r--boost/coroutine/detail/pull_coroutine_impl.hpp48
-rw-r--r--boost/coroutine/detail/pull_coroutine_object.hpp33
-rw-r--r--boost/coroutine/detail/pull_coroutine_synthesized.hpp12
-rw-r--r--boost/coroutine/detail/push_coroutine_impl.hpp47
-rw-r--r--boost/coroutine/detail/push_coroutine_object.hpp33
-rw-r--r--boost/coroutine/detail/push_coroutine_synthesized.hpp12
-rw-r--r--boost/coroutine/detail/symmetric_coroutine_impl.hpp66
-rw-r--r--boost/coroutine/detail/symmetric_coroutine_object.hpp27
-rw-r--r--boost/coroutine/detail/trampoline.hpp22
-rw-r--r--boost/coroutine/detail/trampoline_pull.hpp12
-rw-r--r--boost/coroutine/detail/trampoline_push.hpp22
-rw-r--r--boost/coroutine/flags.hpp6
-rw-r--r--boost/coroutine/posix/segmented_stack_allocator.hpp8
-rw-r--r--boost/coroutine/stack_context.hpp2
-rw-r--r--boost/coroutine2/all.hpp1
-rw-r--r--boost/coroutine2/coroutine.hpp4
-rw-r--r--boost/coroutine2/detail/coroutine.hpp29
-rw-r--r--boost/coroutine2/detail/create_control_block.ipp60
-rw-r--r--boost/coroutine2/detail/decay_copy.hpp36
-rw-r--r--boost/coroutine2/detail/disable_overload.hpp34
-rw-r--r--boost/coroutine2/detail/forced_unwind.hpp6
-rw-r--r--boost/coroutine2/detail/pull_control_block.ipp299
-rw-r--r--boost/coroutine2/detail/pull_control_block_ecv1.hpp (renamed from boost/coroutine2/detail/pull_control_block.hpp)54
-rw-r--r--boost/coroutine2/detail/pull_control_block_ecv1.ipp421
-rw-r--r--boost/coroutine2/detail/pull_control_block_ecv2.hpp114
-rw-r--r--boost/coroutine2/detail/pull_control_block_ecv2.ipp411
-rw-r--r--boost/coroutine2/detail/pull_coroutine.hpp131
-rw-r--r--boost/coroutine2/detail/pull_coroutine.ipp158
-rw-r--r--boost/coroutine2/detail/push_control_block.ipp289
-rw-r--r--boost/coroutine2/detail/push_control_block_ecv1.hpp (renamed from boost/coroutine2/detail/push_control_block.hpp)48
-rw-r--r--boost/coroutine2/detail/push_control_block_ecv1.ipp418
-rw-r--r--boost/coroutine2/detail/push_control_block_ecv2.hpp104
-rw-r--r--boost/coroutine2/detail/push_control_block_ecv2.ipp377
-rw-r--r--boost/coroutine2/detail/push_coroutine.hpp115
-rw-r--r--boost/coroutine2/detail/push_coroutine.ipp138
-rw-r--r--boost/coroutine2/detail/state.hpp53
-rw-r--r--boost/coroutine2/fixedsize_stack.hpp4
-rw-r--r--boost/coroutine2/pooled_fixedsize_stack.hpp33
-rw-r--r--boost/coroutine2/protected_fixedsize_stack.hpp2
-rw-r--r--boost/coroutine2/segmented_stack.hpp4
-rw-r--r--boost/detail/utf8_codecvt_facet.hpp18
-rw-r--r--boost/detail/utf8_codecvt_facet.ipp10
-rw-r--r--boost/detail/winapi/GetCurrentProcess.hpp19
-rw-r--r--boost/detail/winapi/GetCurrentThread.hpp19
-rw-r--r--boost/detail/winapi/GetLastError.hpp18
-rw-r--r--boost/detail/winapi/GetProcessTimes.hpp46
-rw-r--r--boost/detail/winapi/GetThreadTimes.hpp40
-rw-r--r--boost/detail/winapi/access_rights.hpp84
-rw-r--r--boost/detail/winapi/basic_types.hpp8
-rw-r--r--boost/detail/winapi/character_code_conversion.hpp108
-rw-r--r--boost/detail/winapi/condition_variable.hpp7
-rw-r--r--boost/detail/winapi/config.hpp13
-rw-r--r--boost/detail/winapi/crypt.hpp4
-rw-r--r--boost/detail/winapi/dbghelp.hpp171
-rw-r--r--boost/detail/winapi/directory_management.hpp1
-rw-r--r--boost/detail/winapi/dll.hpp25
-rw-r--r--boost/detail/winapi/error_handling.hpp19
-rw-r--r--boost/detail/winapi/event.hpp15
-rw-r--r--boost/detail/winapi/file_management.hpp138
-rw-r--r--boost/detail/winapi/file_mapping.hpp72
-rw-r--r--boost/detail/winapi/get_current_process.hpp34
-rw-r--r--boost/detail/winapi/get_current_process_id.hpp33
-rw-r--r--boost/detail/winapi/get_current_thread.hpp34
-rw-r--r--boost/detail/winapi/get_current_thread_id.hpp34
-rw-r--r--boost/detail/winapi/get_last_error.hpp33
-rw-r--r--boost/detail/winapi/get_process_times.hpp60
-rw-r--r--boost/detail/winapi/get_system_directory.hpp63
-rw-r--r--boost/detail/winapi/get_thread_times.hpp55
-rw-r--r--boost/detail/winapi/handle_info.hpp62
-rw-r--r--boost/detail/winapi/limits.hpp51
-rw-r--r--boost/detail/winapi/mutex.hpp5
-rw-r--r--boost/detail/winapi/overlapped.hpp51
-rw-r--r--boost/detail/winapi/page_protection_flags.hpp56
-rw-r--r--boost/detail/winapi/pipes.hpp317
-rw-r--r--boost/detail/winapi/priority_class.hpp78
-rw-r--r--boost/detail/winapi/process.hpp374
-rw-r--r--boost/detail/winapi/semaphore.hpp9
-rw-r--r--boost/detail/winapi/shell.hpp145
-rw-r--r--boost/detail/winapi/show_window.hpp105
-rw-r--r--boost/detail/winapi/srw_lock.hpp11
-rw-r--r--boost/detail/winapi/thread.hpp8
-rw-r--r--boost/detail/winapi/waitable_timer.hpp19
-rw-r--r--boost/dll.hpp27
-rw-r--r--boost/dll/alias.hpp264
-rw-r--r--boost/dll/detail/aggressive_ptr_cast.hpp130
-rw-r--r--boost/dll/detail/ctor_dtor.hpp176
-rw-r--r--boost/dll/detail/demangling/demangle_symbol.hpp83
-rw-r--r--boost/dll/detail/demangling/itanium.hpp285
-rw-r--r--boost/dll/detail/demangling/mangled_storage_base.hpp118
-rw-r--r--boost/dll/detail/demangling/msvc.hpp400
-rw-r--r--boost/dll/detail/elf_info.hpp285
-rw-r--r--boost/dll/detail/get_mem_fn_type.hpp40
-rw-r--r--boost/dll/detail/macho_info.hpp321
-rw-r--r--boost/dll/detail/pe_info.hpp427
-rw-r--r--boost/dll/detail/posix/path_from_handle.hpp169
-rw-r--r--boost/dll/detail/posix/program_location_impl.hpp140
-rw-r--r--boost/dll/detail/posix/shared_library_impl.hpp215
-rw-r--r--boost/dll/detail/system_error.hpp56
-rw-r--r--boost/dll/detail/windows/path_from_handle.hpp62
-rw-r--r--boost/dll/detail/windows/shared_library_impl.hpp177
-rw-r--r--boost/dll/detail/x_info_interface.hpp32
-rw-r--r--boost/dll/import.hpp277
-rw-r--r--boost/dll/library_info.hpp181
-rw-r--r--boost/dll/runtime_symbol_info.hpp194
-rw-r--r--boost/dll/shared_library.hpp550
-rw-r--r--boost/dll/shared_library_load_mode.hpp249
-rw-r--r--boost/dll/smart_library.hpp347
-rw-r--r--boost/endian/conversion.hpp4
-rw-r--r--boost/endian/detail/intrinsic.hpp21
-rw-r--r--boost/fusion/adapted/adt/adapt_adt.hpp9
-rw-r--r--boost/fusion/adapted/adt/adapt_assoc_adt.hpp10
-rw-r--r--boost/fusion/adapted/adt/detail/adapt_base.hpp60
-rw-r--r--boost/fusion/adapted/adt/detail/adapt_base_assoc_attr_filler.hpp13
-rw-r--r--boost/fusion/adapted/adt/detail/adapt_base_attr_filler.hpp32
-rw-r--r--boost/fusion/adapted/struct/adapt_assoc_struct.hpp9
-rw-r--r--boost/fusion/adapted/struct/adapt_assoc_struct_named.hpp11
-rw-r--r--boost/fusion/adapted/struct/adapt_struct.hpp13
-rw-r--r--boost/fusion/adapted/struct/adapt_struct_named.hpp2
-rw-r--r--boost/fusion/adapted/struct/define_assoc_struct.hpp1
-rw-r--r--boost/fusion/adapted/struct/define_struct.hpp1
-rw-r--r--boost/fusion/adapted/struct/detail/adapt_auto.hpp5
-rw-r--r--boost/fusion/adapted/struct/detail/adapt_base.hpp28
-rw-r--r--boost/fusion/adapted/struct/detail/adapt_base_assoc_attr_filler.hpp24
-rw-r--r--boost/fusion/adapted/struct/detail/adapt_base_attr_filler.hpp26
-rw-r--r--boost/fusion/adapted/struct/detail/adapt_is_tpl.hpp2
-rw-r--r--boost/fusion/adapted/struct/detail/define_struct.hpp114
-rw-r--r--boost/fusion/adapted/struct/detail/define_struct_inline.hpp14
-rw-r--r--boost/fusion/adapted/struct/detail/preprocessor/is_seq.hpp2
-rw-r--r--boost/fusion/algorithm/transformation/zip.hpp1
-rw-r--r--boost/fusion/container/deque/deque.hpp8
-rw-r--r--boost/fusion/container/deque/detail/cpp03/deque.hpp12
-rw-r--r--boost/fusion/container/deque/detail/cpp03/preprocessed/deque10.hpp11
-rw-r--r--boost/fusion/container/deque/detail/cpp03/preprocessed/deque20.hpp11
-rw-r--r--boost/fusion/container/deque/detail/cpp03/preprocessed/deque30.hpp11
-rw-r--r--boost/fusion/container/deque/detail/cpp03/preprocessed/deque40.hpp11
-rw-r--r--boost/fusion/container/deque/detail/cpp03/preprocessed/deque50.hpp11
-rw-r--r--boost/fusion/container/generation/make_vector.hpp34
-rw-r--r--boost/fusion/container/list/cons.hpp6
-rw-r--r--boost/fusion/container/list/detail/cpp03/list.hpp4
-rw-r--r--boost/fusion/container/list/detail/cpp03/preprocessed/list10.hpp2
-rw-r--r--boost/fusion/container/list/detail/cpp03/preprocessed/list20.hpp2
-rw-r--r--boost/fusion/container/list/detail/cpp03/preprocessed/list30.hpp2
-rw-r--r--boost/fusion/container/list/detail/cpp03/preprocessed/list40.hpp2
-rw-r--r--boost/fusion/container/list/detail/cpp03/preprocessed/list50.hpp2
-rw-r--r--boost/fusion/container/map/map.hpp8
-rw-r--r--boost/fusion/container/set/detail/cpp03/preprocessed/set10.hpp3
-rw-r--r--boost/fusion/container/set/detail/cpp03/preprocessed/set20.hpp3
-rw-r--r--boost/fusion/container/set/detail/cpp03/preprocessed/set30.hpp3
-rw-r--r--boost/fusion/container/set/detail/cpp03/preprocessed/set40.hpp3
-rw-r--r--boost/fusion/container/set/detail/cpp03/preprocessed/set50.hpp3
-rw-r--r--boost/fusion/container/set/detail/cpp03/set.hpp5
-rw-r--r--boost/fusion/container/set/set.hpp10
-rw-r--r--boost/fusion/container/vector/detail/cpp03/preprocessed/vvector10.hpp2
-rw-r--r--boost/fusion/container/vector/detail/cpp03/preprocessed/vvector20.hpp2
-rw-r--r--boost/fusion/container/vector/detail/cpp03/preprocessed/vvector30.hpp2
-rw-r--r--boost/fusion/container/vector/detail/cpp03/preprocessed/vvector40.hpp2
-rw-r--r--boost/fusion/container/vector/detail/cpp03/preprocessed/vvector50.hpp2
-rw-r--r--boost/fusion/container/vector/detail/cpp03/vector.hpp4
-rw-r--r--boost/fusion/container/vector/vector.hpp38
-rw-r--r--boost/fusion/sequence/convert.hpp11
-rw-r--r--boost/fusion/support/detail/enabler.hpp22
-rw-r--r--boost/fusion/support/detail/index_sequence.hpp20
-rw-r--r--boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp19
-rw-r--r--boost/fusion/view/single_view/detail/next_impl.hpp5
-rw-r--r--boost/geometry/algorithms/assign.hpp1
-rw-r--r--boost/geometry/algorithms/buffer.hpp2
-rw-r--r--boost/geometry/algorithms/convex_hull.hpp2
-rw-r--r--boost/geometry/algorithms/detail/andoyer_inverse.hpp156
-rw-r--r--boost/geometry/algorithms/detail/as_range.hpp2
-rw-r--r--boost/geometry/algorithms/detail/assign_values.hpp1
-rw-r--r--boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp8
-rw-r--r--boost/geometry/algorithms/detail/buffer/buffer_policies.hpp56
-rw-r--r--boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp37
-rw-r--r--boost/geometry/algorithms/detail/buffer/buffered_ring.hpp23
-rw-r--r--boost/geometry/algorithms/detail/buffer/turn_in_original_visitor.hpp33
-rw-r--r--boost/geometry/algorithms/detail/buffer/turn_in_piece_visitor.hpp24
-rw-r--r--boost/geometry/algorithms/detail/direction_code.hpp79
-rw-r--r--boost/geometry/algorithms/detail/disjoint/box_box.hpp70
-rw-r--r--boost/geometry/algorithms/detail/disjoint/point_box.hpp63
-rw-r--r--boost/geometry/algorithms/detail/disjoint/segment_box.hpp9
-rw-r--r--boost/geometry/algorithms/detail/envelope/segment.hpp116
-rw-r--r--boost/geometry/algorithms/detail/intersection/interface.hpp2
-rw-r--r--boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp2
-rw-r--r--boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp44
-rw-r--r--boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp87
-rw-r--r--boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp545
-rw-r--r--boost/geometry/algorithms/detail/overlay/enrichment_info.hpp9
-rw-r--r--boost/geometry/algorithms/detail/overlay/handle_colocations.hpp466
-rw-r--r--boost/geometry/algorithms/detail/overlay/handle_tangencies.hpp786
-rw-r--r--boost/geometry/algorithms/detail/overlay/handle_touch.hpp336
-rw-r--r--boost/geometry/algorithms/detail/overlay/less_by_segment_ratio.hpp203
-rw-r--r--boost/geometry/algorithms/detail/overlay/overlay.hpp139
-rw-r--r--boost/geometry/algorithms/detail/overlay/segment_identifier.hpp5
-rw-r--r--boost/geometry/algorithms/detail/overlay/select_rings.hpp42
-rw-r--r--boost/geometry/algorithms/detail/overlay/sort_by_side.hpp434
-rw-r--r--boost/geometry/algorithms/detail/overlay/traverse.hpp995
-rw-r--r--boost/geometry/algorithms/detail/overlay/turn_info.hpp10
-rw-r--r--boost/geometry/algorithms/detail/overlay/visit_info.hpp13
-rw-r--r--boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp12
-rw-r--r--boost/geometry/algorithms/detail/recalculate.hpp6
-rw-r--r--boost/geometry/algorithms/detail/relate/result.hpp11
-rw-r--r--boost/geometry/algorithms/difference.hpp2
-rw-r--r--boost/geometry/algorithms/length.hpp8
-rw-r--r--boost/geometry/algorithms/remove_spikes.hpp2
-rw-r--r--boost/geometry/algorithms/simplify.hpp4
-rw-r--r--boost/geometry/algorithms/sym_difference.hpp2
-rw-r--r--boost/geometry/algorithms/transform.hpp6
-rw-r--r--boost/geometry/algorithms/union.hpp2
-rw-r--r--boost/geometry/core/access.hpp11
-rw-r--r--boost/geometry/core/closure.hpp2
-rw-r--r--boost/geometry/core/coordinate_dimension.hpp9
-rw-r--r--boost/geometry/core/coordinate_type.hpp2
-rw-r--r--boost/geometry/core/exterior_ring.hpp1
-rw-r--r--boost/geometry/core/interior_type.hpp3
-rw-r--r--boost/geometry/core/mutable_range.hpp2
-rw-r--r--boost/geometry/core/point_order.hpp2
-rw-r--r--boost/geometry/core/radius.hpp1
-rw-r--r--boost/geometry/core/reverse_dispatch.hpp3
-rw-r--r--boost/geometry/core/tag.hpp1
-rw-r--r--boost/geometry/core/tag_cast.hpp2
-rw-r--r--boost/geometry/extensions/algorithms/inverse.hpp59
-rw-r--r--boost/geometry/geometries/adapted/boost_polygon/ring_proxy.hpp2
-rw-r--r--boost/geometry/index/detail/rtree/pack_create.hpp14
-rw-r--r--boost/geometry/index/rtree.hpp14
-rw-r--r--boost/geometry/io/svg/svg_mapper.hpp50
-rw-r--r--boost/geometry/io/svg/write_svg.hpp30
-rw-r--r--boost/geometry/io/svg/write_svg_multi.hpp31
-rw-r--r--boost/geometry/io/wkt/read.hpp9
-rw-r--r--boost/geometry/policies/robustness/get_rescale_policy.hpp15
-rw-r--r--boost/geometry/policies/robustness/rescale_policy.hpp2
-rw-r--r--boost/geometry/policies/robustness/robust_type.hpp2
-rw-r--r--boost/geometry/strategies/agnostic/point_in_box_by_side.hpp56
-rw-r--r--boost/geometry/strategies/agnostic/point_in_poly_winding.hpp330
-rw-r--r--boost/geometry/strategies/cartesian/area_surveyor.hpp21
-rw-r--r--boost/geometry/strategies/cartesian/box_in_box.hpp123
-rw-r--r--boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp2
-rw-r--r--boost/geometry/strategies/cartesian/distance_projected_point.hpp2
-rw-r--r--boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp2
-rw-r--r--boost/geometry/strategies/cartesian/distance_pythagoras.hpp5
-rw-r--r--boost/geometry/strategies/cartesian/point_in_box.hpp114
-rw-r--r--boost/geometry/strategies/cartesian/side_by_triangle.hpp3
-rw-r--r--boost/geometry/strategies/geographic/distance_andoyer.hpp71
-rw-r--r--boost/geometry/strategies/spherical/ssf.hpp12
-rw-r--r--boost/geometry/util/calculation_type.hpp4
-rw-r--r--boost/geometry/util/combine_if.hpp2
-rw-r--r--boost/geometry/util/math.hpp61
-rw-r--r--boost/geometry/util/normalize_spheroidal_coordinates.hpp106
-rw-r--r--boost/geometry/util/parameter_type_of.hpp2
-rw-r--r--boost/geometry/util/promote_floating_point.hpp2
-rw-r--r--boost/geometry/util/range.hpp55
-rw-r--r--boost/geometry/util/select_calculation_type.hpp2
-rw-r--r--boost/geometry/util/select_most_precise.hpp3
-rw-r--r--boost/graph/adjacency_matrix.hpp2
-rw-r--r--boost/hana.hpp208
-rw-r--r--boost/hana/accessors.hpp56
-rw-r--r--boost/hana/adapt_adt.hpp17
-rw-r--r--boost/hana/adapt_struct.hpp17
-rw-r--r--boost/hana/adjust.hpp55
-rw-r--r--boost/hana/adjust_if.hpp78
-rw-r--r--boost/hana/all.hpp48
-rw-r--r--boost/hana/all_of.hpp51
-rw-r--r--boost/hana/and.hpp58
-rw-r--r--boost/hana/any.hpp48
-rw-r--r--boost/hana/any_of.hpp190
-rw-r--r--boost/hana/ap.hpp78
-rw-r--r--boost/hana/append.hpp74
-rw-r--r--boost/hana/assert.hpp306
-rw-r--r--boost/hana/at.hpp57
-rw-r--r--boost/hana/at_key.hpp121
-rw-r--r--boost/hana/back.hpp53
-rw-r--r--boost/hana/basic_tuple.hpp299
-rw-r--r--boost/hana/bool.hpp264
-rw-r--r--boost/hana/cartesian_product.hpp113
-rw-r--r--boost/hana/chain.hpp50
-rw-r--r--boost/hana/comparing.hpp45
-rw-r--r--boost/hana/concat.hpp80
-rw-r--r--boost/hana/concept.hpp35
-rw-r--r--boost/hana/concept/applicative.hpp31
-rw-r--r--boost/hana/concept/comonad.hpp33
-rw-r--r--boost/hana/concept/comparable.hpp29
-rw-r--r--boost/hana/concept/constant.hpp29
-rw-r--r--boost/hana/concept/euclidean_ring.hpp31
-rw-r--r--boost/hana/concept/foldable.hpp31
-rw-r--r--boost/hana/concept/functor.hpp31
-rw-r--r--boost/hana/concept/group.hpp31
-rw-r--r--boost/hana/concept/hashable.hpp30
-rw-r--r--boost/hana/concept/integral_constant.hpp40
-rw-r--r--boost/hana/concept/iterable.hpp33
-rw-r--r--boost/hana/concept/logical.hpp33
-rw-r--r--boost/hana/concept/metafunction.hpp38
-rw-r--r--boost/hana/concept/monad.hpp31
-rw-r--r--boost/hana/concept/monad_plus.hpp31
-rw-r--r--boost/hana/concept/monoid.hpp31
-rw-r--r--boost/hana/concept/orderable.hpp29
-rw-r--r--boost/hana/concept/product.hpp31
-rw-r--r--boost/hana/concept/ring.hpp31
-rw-r--r--boost/hana/concept/searchable.hpp31
-rw-r--r--boost/hana/concept/sequence.hpp41
-rw-r--r--boost/hana/concept/struct.hpp29
-rw-r--r--boost/hana/config.hpp215
-rw-r--r--boost/hana/contains.hpp51
-rw-r--r--boost/hana/core.hpp22
-rw-r--r--boost/hana/core/common.hpp109
-rw-r--r--boost/hana/core/default.hpp32
-rw-r--r--boost/hana/core/dispatch.hpp18
-rw-r--r--boost/hana/core/is_a.hpp41
-rw-r--r--boost/hana/core/make.hpp45
-rw-r--r--boost/hana/core/tag_of.hpp49
-rw-r--r--boost/hana/core/to.hpp194
-rw-r--r--boost/hana/core/when.hpp15
-rw-r--r--boost/hana/count.hpp50
-rw-r--r--boost/hana/count_if.hpp92
-rw-r--r--boost/hana/cycle.hpp127
-rw-r--r--boost/hana/define_struct.hpp17
-rw-r--r--boost/hana/detail/algorithm.hpp184
-rw-r--r--boost/hana/detail/any_of.hpp46
-rw-r--r--boost/hana/detail/array.hpp105
-rw-r--r--boost/hana/detail/canonical_constant.hpp80
-rw-r--r--boost/hana/detail/concepts.hpp76
-rw-r--r--boost/hana/detail/create.hpp33
-rw-r--r--boost/hana/detail/decay.hpp48
-rw-r--r--boost/hana/detail/dependent_on.hpp24
-rw-r--r--boost/hana/detail/dispatch_if.hpp56
-rw-r--r--boost/hana/detail/fast_and.hpp25
-rw-r--r--boost/hana/detail/first_unsatisfied_index.hpp56
-rw-r--r--boost/hana/detail/has_common_embedding.hpp69
-rw-r--r--boost/hana/detail/has_duplicates.hpp65
-rw-r--r--boost/hana/detail/hash_table.hpp145
-rw-r--r--boost/hana/detail/index_if.hpp69
-rw-r--r--boost/hana/detail/intrinsics.hpp67
-rw-r--r--boost/hana/detail/nested_by.hpp40
-rw-r--r--boost/hana/detail/nested_by_fwd.hpp55
-rw-r--r--boost/hana/detail/nested_than.hpp29
-rw-r--r--boost/hana/detail/nested_than_fwd.hpp47
-rw-r--r--boost/hana/detail/nested_to.hpp28
-rw-r--r--boost/hana/detail/nested_to_fwd.hpp47
-rw-r--r--boost/hana/detail/operators/adl.hpp34
-rw-r--r--boost/hana/detail/operators/arithmetic.hpp78
-rw-r--r--boost/hana/detail/operators/comparable.hpp44
-rw-r--r--boost/hana/detail/operators/iterable.hpp40
-rw-r--r--boost/hana/detail/operators/logical.hpp51
-rw-r--r--boost/hana/detail/operators/monad.hpp35
-rw-r--r--boost/hana/detail/operators/orderable.hpp60
-rw-r--r--boost/hana/detail/operators/searchable.hpp40
-rw-r--r--boost/hana/detail/preprocessor.hpp106
-rw-r--r--boost/hana/detail/std_common_type.hpp36
-rw-r--r--boost/hana/detail/struct_macros.erb.hpp185
-rw-r--r--boost/hana/detail/struct_macros.hpp3469
-rw-r--r--boost/hana/detail/type_foldl1.hpp145
-rw-r--r--boost/hana/detail/type_foldr1.hpp149
-rw-r--r--boost/hana/detail/unpack_flatten.hpp70
-rw-r--r--boost/hana/detail/variadic/at.hpp40
-rw-r--r--boost/hana/detail/variadic/drop_into.hpp47
-rw-r--r--boost/hana/detail/variadic/foldl1.hpp212
-rw-r--r--boost/hana/detail/variadic/foldr1.hpp208
-rw-r--r--boost/hana/detail/variadic/reverse_apply.hpp27
-rw-r--r--boost/hana/detail/variadic/reverse_apply/flat.hpp41
-rw-r--r--boost/hana/detail/variadic/reverse_apply/unrolled.hpp87
-rw-r--r--boost/hana/detail/variadic/split_at.hpp153
-rw-r--r--boost/hana/detail/variadic/take.hpp51
-rw-r--r--boost/hana/detail/void_t.hpp21
-rw-r--r--boost/hana/detail/wrong.hpp33
-rw-r--r--boost/hana/difference.hpp39
-rw-r--r--boost/hana/div.hpp107
-rw-r--r--boost/hana/drop_back.hpp75
-rw-r--r--boost/hana/drop_front.hpp57
-rw-r--r--boost/hana/drop_front_exactly.hpp85
-rw-r--r--boost/hana/drop_while.hpp93
-rw-r--r--boost/hana/duplicate.hpp48
-rw-r--r--boost/hana/empty.hpp53
-rw-r--r--boost/hana/equal.hpp199
-rw-r--r--boost/hana/erase_key.hpp37
-rw-r--r--boost/hana/eval.hpp57
-rw-r--r--boost/hana/eval_if.hpp93
-rw-r--r--boost/hana/experimental/printable.hpp243
-rw-r--r--boost/hana/experimental/types.hpp178
-rw-r--r--boost/hana/experimental/view.hpp512
-rw-r--r--boost/hana/ext/boost.hpp21
-rw-r--r--boost/hana/ext/boost/fusion.hpp22
-rw-r--r--boost/hana/ext/boost/fusion/deque.hpp108
-rw-r--r--boost/hana/ext/boost/fusion/detail/common.hpp79
-rw-r--r--boost/hana/ext/boost/fusion/list.hpp111
-rw-r--r--boost/hana/ext/boost/fusion/tuple.hpp49
-rw-r--r--boost/hana/ext/boost/fusion/vector.hpp110
-rw-r--r--boost/hana/ext/boost/mpl.hpp21
-rw-r--r--boost/hana/ext/boost/mpl/integral_c.hpp81
-rw-r--r--boost/hana/ext/boost/mpl/list.hpp186
-rw-r--r--boost/hana/ext/boost/mpl/vector.hpp185
-rw-r--r--boost/hana/ext/boost/tuple.hpp138
-rw-r--r--boost/hana/ext/std.hpp30
-rw-r--r--boost/hana/ext/std/array.hpp163
-rw-r--r--boost/hana/ext/std/integer_sequence.hpp140
-rw-r--r--boost/hana/ext/std/integral_constant.hpp96
-rw-r--r--boost/hana/ext/std/pair.hpp91
-rw-r--r--boost/hana/ext/std/ratio.hpp164
-rw-r--r--boost/hana/ext/std/tuple.hpp190
-rw-r--r--boost/hana/ext/std/vector.hpp110
-rw-r--r--boost/hana/extend.hpp50
-rw-r--r--boost/hana/extract.hpp45
-rw-r--r--boost/hana/fill.hpp74
-rw-r--r--boost/hana/filter.hpp135
-rw-r--r--boost/hana/find.hpp61
-rw-r--r--boost/hana/find_if.hpp177
-rw-r--r--boost/hana/first.hpp45
-rw-r--r--boost/hana/flatten.hpp62
-rw-r--r--boost/hana/fold.hpp17
-rw-r--r--boost/hana/fold_left.hpp97
-rw-r--r--boost/hana/fold_right.hpp97
-rw-r--r--boost/hana/for_each.hpp62
-rw-r--r--boost/hana/front.hpp47
-rw-r--r--boost/hana/functional.hpp33
-rw-r--r--boost/hana/functional/always.hpp64
-rw-r--r--boost/hana/functional/apply.hpp85
-rw-r--r--boost/hana/functional/arg.hpp141
-rw-r--r--boost/hana/functional/capture.hpp112
-rw-r--r--boost/hana/functional/compose.hpp108
-rw-r--r--boost/hana/functional/curry.hpp169
-rw-r--r--boost/hana/functional/demux.hpp269
-rw-r--r--boost/hana/functional/fix.hpp83
-rw-r--r--boost/hana/functional/flip.hpp73
-rw-r--r--boost/hana/functional/id.hpp38
-rw-r--r--boost/hana/functional/infix.hpp184
-rw-r--r--boost/hana/functional/iterate.hpp201
-rw-r--r--boost/hana/functional/lockstep.hpp114
-rw-r--r--boost/hana/functional/on.hpp83
-rw-r--r--boost/hana/functional/overload.hpp88
-rw-r--r--boost/hana/functional/overload_linearly.hpp105
-rw-r--r--boost/hana/functional/partial.hpp107
-rw-r--r--boost/hana/functional/placeholder.hpp263
-rw-r--r--boost/hana/functional/reverse_partial.hpp101
-rw-r--r--boost/hana/fuse.hpp48
-rw-r--r--boost/hana/fwd/accessors.hpp50
-rw-r--r--boost/hana/fwd/adapt_adt.hpp48
-rw-r--r--boost/hana/fwd/adapt_struct.hpp48
-rw-r--r--boost/hana/fwd/adjust.hpp64
-rw-r--r--boost/hana/fwd/adjust_if.hpp69
-rw-r--r--boost/hana/fwd/all.hpp46
-rw-r--r--boost/hana/fwd/all_of.hpp54
-rw-r--r--boost/hana/fwd/and.hpp53
-rw-r--r--boost/hana/fwd/any.hpp46
-rw-r--r--boost/hana/fwd/any_of.hpp53
-rw-r--r--boost/hana/fwd/ap.hpp82
-rw-r--r--boost/hana/fwd/append.hpp68
-rw-r--r--boost/hana/fwd/at.hpp97
-rw-r--r--boost/hana/fwd/at_key.hpp75
-rw-r--r--boost/hana/fwd/back.hpp48
-rw-r--r--boost/hana/fwd/basic_tuple.hpp65
-rw-r--r--boost/hana/fwd/bool.hpp15
-rw-r--r--boost/hana/fwd/cartesian_product.hpp70
-rw-r--r--boost/hana/fwd/chain.hpp67
-rw-r--r--boost/hana/fwd/comparing.hpp65
-rw-r--r--boost/hana/fwd/concat.hpp63
-rw-r--r--boost/hana/fwd/concept/applicative.hpp117
-rw-r--r--boost/hana/fwd/concept/comonad.hpp111
-rw-r--r--boost/hana/fwd/concept/comparable.hpp161
-rw-r--r--boost/hana/fwd/concept/constant.hpp210
-rw-r--r--boost/hana/fwd/concept/euclidean_ring.hpp117
-rw-r--r--boost/hana/fwd/concept/foldable.hpp141
-rw-r--r--boost/hana/fwd/concept/functor.hpp139
-rw-r--r--boost/hana/fwd/concept/group.hpp111
-rw-r--r--boost/hana/fwd/concept/hashable.hpp68
-rw-r--r--boost/hana/fwd/concept/integral_constant.hpp73
-rw-r--r--boost/hana/fwd/concept/iterable.hpp149
-rw-r--r--boost/hana/fwd/concept/logical.hpp166
-rw-r--r--boost/hana/fwd/concept/metafunction.hpp99
-rw-r--r--boost/hana/fwd/concept/monad.hpp198
-rw-r--r--boost/hana/fwd/concept/monad_plus.hpp89
-rw-r--r--boost/hana/fwd/concept/monoid.hpp101
-rw-r--r--boost/hana/fwd/concept/orderable.hpp187
-rw-r--r--boost/hana/fwd/concept/product.hpp103
-rw-r--r--boost/hana/fwd/concept/ring.hpp106
-rw-r--r--boost/hana/fwd/concept/searchable.hpp143
-rw-r--r--boost/hana/fwd/concept/sequence.hpp165
-rw-r--r--boost/hana/fwd/concept/struct.hpp156
-rw-r--r--boost/hana/fwd/contains.hpp73
-rw-r--r--boost/hana/fwd/core.hpp21
-rw-r--r--boost/hana/fwd/core/common.hpp103
-rw-r--r--boost/hana/fwd/core/default.hpp56
-rw-r--r--boost/hana/fwd/core/is_a.hpp61
-rw-r--r--boost/hana/fwd/core/make.hpp70
-rw-r--r--boost/hana/fwd/core/tag_of.hpp120
-rw-r--r--boost/hana/fwd/core/to.hpp174
-rw-r--r--boost/hana/fwd/core/when.hpp74
-rw-r--r--boost/hana/fwd/count.hpp57
-rw-r--r--boost/hana/fwd/count_if.hpp63
-rw-r--r--boost/hana/fwd/cycle.hpp76
-rw-r--r--boost/hana/fwd/define_struct.hpp48
-rw-r--r--boost/hana/fwd/difference.hpp72
-rw-r--r--boost/hana/fwd/div.hpp59
-rw-r--r--boost/hana/fwd/drop_back.hpp63
-rw-r--r--boost/hana/fwd/drop_front.hpp66
-rw-r--r--boost/hana/fwd/drop_front_exactly.hpp67
-rw-r--r--boost/hana/fwd/drop_while.hpp60
-rw-r--r--boost/hana/fwd/duplicate.hpp57
-rw-r--r--boost/hana/fwd/empty.hpp51
-rw-r--r--boost/hana/fwd/equal.hpp80
-rw-r--r--boost/hana/fwd/erase_key.hpp32
-rw-r--r--boost/hana/fwd/eval.hpp58
-rw-r--r--boost/hana/fwd/eval_if.hpp155
-rw-r--r--boost/hana/fwd/extend.hpp62
-rw-r--r--boost/hana/fwd/extract.hpp58
-rw-r--r--boost/hana/fwd/fill.hpp57
-rw-r--r--boost/hana/fwd/filter.hpp88
-rw-r--r--boost/hana/fwd/find.hpp60
-rw-r--r--boost/hana/fwd/find_if.hpp64
-rw-r--r--boost/hana/fwd/first.hpp49
-rw-r--r--boost/hana/fwd/flatten.hpp63
-rw-r--r--boost/hana/fwd/fold.hpp38
-rw-r--r--boost/hana/fwd/fold_left.hpp96
-rw-r--r--boost/hana/fwd/fold_right.hpp100
-rw-r--r--boost/hana/fwd/for_each.hpp55
-rw-r--r--boost/hana/fwd/front.hpp48
-rw-r--r--boost/hana/fwd/fuse.hpp55
-rw-r--r--boost/hana/fwd/greater.hpp53
-rw-r--r--boost/hana/fwd/greater_equal.hpp54
-rw-r--r--boost/hana/fwd/group.hpp103
-rw-r--r--boost/hana/fwd/hash.hpp68
-rw-r--r--boost/hana/fwd/if.hpp57
-rw-r--r--boost/hana/fwd/insert.hpp60
-rw-r--r--boost/hana/fwd/insert_range.hpp57
-rw-r--r--boost/hana/fwd/integral_constant.hpp399
-rw-r--r--boost/hana/fwd/intersection.hpp61
-rw-r--r--boost/hana/fwd/intersperse.hpp57
-rw-r--r--boost/hana/fwd/is_disjoint.hpp58
-rw-r--r--boost/hana/fwd/is_empty.hpp49
-rw-r--r--boost/hana/fwd/is_subset.hpp87
-rw-r--r--boost/hana/fwd/keys.hpp50
-rw-r--r--boost/hana/fwd/lazy.hpp124
-rw-r--r--boost/hana/fwd/length.hpp50
-rw-r--r--boost/hana/fwd/less.hpp53
-rw-r--r--boost/hana/fwd/less_equal.hpp54
-rw-r--r--boost/hana/fwd/lexicographical_compare.hpp101
-rw-r--r--boost/hana/fwd/lift.hpp59
-rw-r--r--boost/hana/fwd/map.hpp233
-rw-r--r--boost/hana/fwd/max.hpp44
-rw-r--r--boost/hana/fwd/maximum.hpp116
-rw-r--r--boost/hana/fwd/members.hpp46
-rw-r--r--boost/hana/fwd/min.hpp51
-rw-r--r--boost/hana/fwd/minimum.hpp116
-rw-r--r--boost/hana/fwd/minus.hpp67
-rw-r--r--boost/hana/fwd/mod.hpp62
-rw-r--r--boost/hana/fwd/monadic_compose.hpp75
-rw-r--r--boost/hana/fwd/monadic_fold_left.hpp104
-rw-r--r--boost/hana/fwd/monadic_fold_right.hpp106
-rw-r--r--boost/hana/fwd/mult.hpp63
-rw-r--r--boost/hana/fwd/negate.hpp42
-rw-r--r--boost/hana/fwd/none.hpp46
-rw-r--r--boost/hana/fwd/none_of.hpp55
-rw-r--r--boost/hana/fwd/not.hpp47
-rw-r--r--boost/hana/fwd/not_equal.hpp70
-rw-r--r--boost/hana/fwd/one.hpp45
-rw-r--r--boost/hana/fwd/optional.hpp510
-rw-r--r--boost/hana/fwd/or.hpp53
-rw-r--r--boost/hana/fwd/ordering.hpp65
-rw-r--r--boost/hana/fwd/pair.hpp153
-rw-r--r--boost/hana/fwd/partition.hpp89
-rw-r--r--boost/hana/fwd/permutations.hpp50
-rw-r--r--boost/hana/fwd/plus.hpp63
-rw-r--r--boost/hana/fwd/power.hpp56
-rw-r--r--boost/hana/fwd/prefix.hpp72
-rw-r--r--boost/hana/fwd/prepend.hpp73
-rw-r--r--boost/hana/fwd/product.hpp78
-rw-r--r--boost/hana/fwd/range.hpp149
-rw-r--r--boost/hana/fwd/remove.hpp70
-rw-r--r--boost/hana/fwd/remove_at.hpp82
-rw-r--r--boost/hana/fwd/remove_if.hpp69
-rw-r--r--boost/hana/fwd/remove_range.hpp85
-rw-r--r--boost/hana/fwd/repeat.hpp58
-rw-r--r--boost/hana/fwd/replace.hpp64
-rw-r--r--boost/hana/fwd/replace_if.hpp63
-rw-r--r--boost/hana/fwd/replicate.hpp75
-rw-r--r--boost/hana/fwd/reverse.hpp49
-rw-r--r--boost/hana/fwd/reverse_fold.hpp84
-rw-r--r--boost/hana/fwd/scan_left.hpp105
-rw-r--r--boost/hana/fwd/scan_right.hpp105
-rw-r--r--boost/hana/fwd/second.hpp48
-rw-r--r--boost/hana/fwd/set.hpp194
-rw-r--r--boost/hana/fwd/size.hpp33
-rw-r--r--boost/hana/fwd/slice.hpp105
-rw-r--r--boost/hana/fwd/sort.hpp110
-rw-r--r--boost/hana/fwd/span.hpp85
-rw-r--r--boost/hana/fwd/string.hpp240
-rw-r--r--boost/hana/fwd/suffix.hpp72
-rw-r--r--boost/hana/fwd/sum.hpp79
-rw-r--r--boost/hana/fwd/symmetric_difference.hpp62
-rw-r--r--boost/hana/fwd/take_back.hpp58
-rw-r--r--boost/hana/fwd/take_front.hpp78
-rw-r--r--boost/hana/fwd/take_while.hpp56
-rw-r--r--boost/hana/fwd/tap.hpp65
-rw-r--r--boost/hana/fwd/then.hpp52
-rw-r--r--boost/hana/fwd/transform.hpp64
-rw-r--r--boost/hana/fwd/tuple.hpp224
-rw-r--r--boost/hana/fwd/type.hpp478
-rw-r--r--boost/hana/fwd/unfold_left.hpp85
-rw-r--r--boost/hana/fwd/unfold_right.hpp85
-rw-r--r--boost/hana/fwd/union.hpp61
-rw-r--r--boost/hana/fwd/unique.hpp91
-rw-r--r--boost/hana/fwd/unpack.hpp103
-rw-r--r--boost/hana/fwd/value.hpp100
-rw-r--r--boost/hana/fwd/while.hpp71
-rw-r--r--boost/hana/fwd/zero.hpp45
-rw-r--r--boost/hana/fwd/zip.hpp61
-rw-r--r--boost/hana/fwd/zip_shortest.hpp61
-rw-r--r--boost/hana/fwd/zip_shortest_with.hpp62
-rw-r--r--boost/hana/fwd/zip_with.hpp62
-rw-r--r--boost/hana/greater.hpp71
-rw-r--r--boost/hana/greater_equal.hpp74
-rw-r--r--boost/hana/group.hpp157
-rw-r--r--boost/hana/hash.hpp114
-rw-r--r--boost/hana/if.hpp61
-rw-r--r--boost/hana/insert.hpp52
-rw-r--r--boost/hana/insert_range.hpp64
-rw-r--r--boost/hana/integral_constant.hpp15
-rw-r--r--boost/hana/intersection.hpp39
-rw-r--r--boost/hana/intersperse.hpp76
-rw-r--r--boost/hana/is_disjoint.hpp65
-rw-r--r--boost/hana/is_empty.hpp45
-rw-r--r--boost/hana/is_subset.hpp84
-rw-r--r--boost/hana/keys.hpp48
-rw-r--r--boost/hana/lazy.hpp229
-rw-r--r--boost/hana/length.hpp57
-rw-r--r--boost/hana/less.hpp142
-rw-r--r--boost/hana/less_equal.hpp75
-rw-r--r--boost/hana/lexicographical_compare.hpp110
-rw-r--r--boost/hana/lift.hpp54
-rw-r--r--boost/hana/map.hpp389
-rw-r--r--boost/hana/max.hpp58
-rw-r--r--boost/hana/maximum.hpp97
-rw-r--r--boost/hana/members.hpp65
-rw-r--r--boost/hana/min.hpp58
-rw-r--r--boost/hana/minimum.hpp97
-rw-r--r--boost/hana/minus.hpp114
-rw-r--r--boost/hana/mod.hpp107
-rw-r--r--boost/hana/monadic_compose.hpp51
-rw-r--r--boost/hana/monadic_fold_left.hpp131
-rw-r--r--boost/hana/monadic_fold_right.hpp130
-rw-r--r--boost/hana/mult.hpp107
-rw-r--r--boost/hana/negate.hpp61
-rw-r--r--boost/hana/none.hpp48
-rw-r--r--boost/hana/none_of.hpp50
-rw-r--r--boost/hana/not.hpp75
-rw-r--r--boost/hana/not_equal.hpp59
-rw-r--r--boost/hana/one.hpp79
-rw-r--r--boost/hana/optional.hpp416
-rw-r--r--boost/hana/or.hpp61
-rw-r--r--boost/hana/ordering.hpp45
-rw-r--r--boost/hana/pair.hpp147
-rw-r--r--boost/hana/partition.hpp116
-rw-r--r--boost/hana/permutations.hpp78
-rw-r--r--boost/hana/plus.hpp109
-rw-r--r--boost/hana/power.hpp65
-rw-r--r--boost/hana/prefix.hpp52
-rw-r--r--boost/hana/prepend.hpp74
-rw-r--r--boost/hana/product.hpp58
-rw-r--r--boost/hana/range.hpp294
-rw-r--r--boost/hana/remove.hpp54
-rw-r--r--boost/hana/remove_at.hpp86
-rw-r--r--boost/hana/remove_if.hpp52
-rw-r--r--boost/hana/remove_range.hpp100
-rw-r--r--boost/hana/repeat.hpp58
-rw-r--r--boost/hana/replace.hpp56
-rw-r--r--boost/hana/replace_if.hpp54
-rw-r--r--boost/hana/replicate.hpp74
-rw-r--r--boost/hana/reverse.hpp61
-rw-r--r--boost/hana/reverse_fold.hpp37
-rw-r--r--boost/hana/scan_left.hpp133
-rw-r--r--boost/hana/scan_right.hpp130
-rw-r--r--boost/hana/second.hpp45
-rw-r--r--boost/hana/set.hpp322
-rw-r--r--boost/hana/size.hpp17
-rw-r--r--boost/hana/slice.hpp99
-rw-r--r--boost/hana/sort.hpp173
-rw-r--r--boost/hana/span.hpp75
-rw-r--r--boost/hana/string.hpp290
-rw-r--r--boost/hana/suffix.hpp52
-rw-r--r--boost/hana/sum.hpp58
-rw-r--r--boost/hana/symmetric_difference.hpp46
-rw-r--r--boost/hana/take_back.hpp68
-rw-r--r--boost/hana/take_front.hpp75
-rw-r--r--boost/hana/take_while.hpp55
-rw-r--r--boost/hana/tap.hpp59
-rw-r--r--boost/hana/then.hpp55
-rw-r--r--boost/hana/traits.hpp213
-rw-r--r--boost/hana/transform.hpp76
-rw-r--r--boost/hana/tuple.hpp305
-rw-r--r--boost/hana/type.hpp223
-rw-r--r--boost/hana/unfold_left.hpp71
-rw-r--r--boost/hana/unfold_right.hpp71
-rw-r--r--boost/hana/union.hpp39
-rw-r--r--boost/hana/unique.hpp75
-rw-r--r--boost/hana/unpack.hpp141
-rw-r--r--boost/hana/value.hpp56
-rw-r--r--boost/hana/version.hpp53
-rw-r--r--boost/hana/while.hpp117
-rw-r--r--boost/hana/zero.hpp81
-rw-r--r--boost/hana/zip.hpp50
-rw-r--r--boost/hana/zip_shortest.hpp51
-rw-r--r--boost/hana/zip_shortest_with.hpp63
-rw-r--r--boost/hana/zip_with.hpp70
-rw-r--r--boost/heap/binomial_heap.hpp4
-rw-r--r--boost/heap/detail/stable_heap.hpp83
-rw-r--r--boost/heap/detail/tree_iterator.hpp6
-rw-r--r--boost/heap/priority_queue.hpp18
-rw-r--r--boost/interprocess/detail/utilities.hpp18
-rw-r--r--boost/interprocess/detail/win32_api.hpp6
-rw-r--r--boost/interprocess/detail/workaround.hpp17
-rw-r--r--boost/interprocess/offset_ptr.hpp140
-rw-r--r--boost/intrusive/avl_set.hpp49
-rw-r--r--boost/intrusive/avltree.hpp22
-rw-r--r--boost/intrusive/bs_set.hpp41
-rw-r--r--boost/intrusive/bstree.hpp38
-rw-r--r--boost/intrusive/detail/any_node_and_algorithms.hpp89
-rw-r--r--boost/intrusive/detail/avltree_node.hpp53
-rw-r--r--boost/intrusive/detail/bstree_algorithms_base.hpp4
-rw-r--r--boost/intrusive/detail/config_begin.hpp11
-rw-r--r--boost/intrusive/detail/default_header_holder.hpp7
-rw-r--r--boost/intrusive/detail/ebo_functor_holder.hpp51
-rw-r--r--boost/intrusive/detail/equal_to_value.hpp4
-rw-r--r--boost/intrusive/detail/exception_disposer.hpp6
-rw-r--r--boost/intrusive/detail/has_member_function_callable_with.hpp5
-rw-r--r--boost/intrusive/detail/hashtable_node.hpp33
-rw-r--r--boost/intrusive/detail/hook_traits.hpp17
-rw-r--r--boost/intrusive/detail/iiterator.hpp15
-rw-r--r--boost/intrusive/detail/iterator.hpp31
-rw-r--r--boost/intrusive/detail/list_iterator.hpp43
-rw-r--r--boost/intrusive/detail/list_node.hpp13
-rw-r--r--boost/intrusive/detail/parent_from_member.hpp9
-rw-r--r--boost/intrusive/detail/rbtree_node.hpp57
-rw-r--r--boost/intrusive/detail/reverse_iterator.hpp45
-rw-r--r--boost/intrusive/detail/size_holder.hpp26
-rw-r--r--boost/intrusive/detail/slist_iterator.hpp41
-rw-r--r--boost/intrusive/detail/slist_node.hpp7
-rw-r--r--boost/intrusive/detail/to_raw_pointer.hpp5
-rw-r--r--boost/intrusive/detail/transform_iterator.hpp45
-rw-r--r--boost/intrusive/detail/tree_iterator.hpp45
-rw-r--r--boost/intrusive/detail/tree_node.hpp19
-rw-r--r--boost/intrusive/detail/tree_value_compare.hpp11
-rw-r--r--boost/intrusive/detail/workaround.hpp12
-rw-r--r--boost/intrusive/hashtable.hpp34
-rw-r--r--boost/intrusive/list.hpp21
-rw-r--r--boost/intrusive/member_value_traits.hpp8
-rw-r--r--boost/intrusive/parent_from_member.hpp5
-rw-r--r--boost/intrusive/pointer_plus_bits.hpp8
-rw-r--r--boost/intrusive/pointer_traits.hpp8
-rw-r--r--boost/intrusive/priority_compare.hpp7
-rw-r--r--boost/intrusive/rbtree.hpp23
-rw-r--r--boost/intrusive/set.hpp41
-rw-r--r--boost/intrusive/sg_set.hpp49
-rw-r--r--boost/intrusive/sgtree.hpp31
-rw-r--r--boost/intrusive/slist.hpp18
-rw-r--r--boost/intrusive/splay_set.hpp41
-rw-r--r--boost/intrusive/splaytree.hpp23
-rw-r--r--boost/intrusive/treap.hpp128
-rw-r--r--boost/intrusive/treap_set.hpp86
-rw-r--r--boost/intrusive/trivial_value_traits.hpp9
-rw-r--r--boost/intrusive/unordered_set.hpp4
-rw-r--r--boost/lexical_cast.hpp2
-rw-r--r--boost/lexical_cast/lexical_cast_old.hpp1
-rw-r--r--boost/lexical_cast/try_lexical_convert.hpp25
-rw-r--r--boost/lockfree/detail/atomic.hpp6
-rw-r--r--boost/lockfree/detail/freelist.hpp19
-rw-r--r--boost/lockfree/spsc_queue.hpp10
-rw-r--r--boost/log/attributes/attribute_value_impl.hpp2
-rw-r--r--boost/log/detail/config.hpp18
-rw-r--r--boost/log/detail/light_rw_mutex.hpp2
-rw-r--r--boost/log/detail/threadsafe_queue.hpp7
-rw-r--r--boost/log/detail/timestamp.hpp5
-rw-r--r--boost/log/expressions/formatter.hpp14
-rw-r--r--boost/log/keywords/max_files.hpp40
-rw-r--r--boost/log/sinks/text_file_backend.hpp15
-rw-r--r--boost/log/utility/formatting_ostream.hpp35
-rw-r--r--boost/log/utility/once_block.hpp2
-rw-r--r--boost/log/utility/setup/file.hpp1
-rw-r--r--boost/make_unique.hpp14
-rw-r--r--boost/math/bindings/mpfr.hpp2
-rw-r--r--boost/math/cstdfloat/cstdfloat_complex_std.hpp8
-rw-r--r--boost/math/special_functions/detail/polygamma.hpp2
-rw-r--r--boost/math/special_functions/detail/t_distribution_inv.hpp2
-rw-r--r--boost/math/special_functions/ellint_2.hpp2
-rw-r--r--boost/math/special_functions/ellint_3.hpp2
-rw-r--r--boost/math/special_functions/fpclassify.hpp20
-rw-r--r--boost/math/tools/config.hpp12
-rw-r--r--boost/math/tools/polynomial.hpp378
-rw-r--r--boost/metaparse.hpp123
-rw-r--r--boost/metaparse/accept.hpp20
-rw-r--r--boost/metaparse/accept_tag.hpp20
-rw-r--r--boost/metaparse/accept_when.hpp20
-rw-r--r--boost/metaparse/alphanum.hpp20
-rw-r--r--boost/metaparse/always.hpp20
-rw-r--r--boost/metaparse/always_c.hpp20
-rw-r--r--boost/metaparse/build_parser.hpp20
-rw-r--r--boost/metaparse/change_error_message.hpp20
-rw-r--r--boost/metaparse/config.hpp40
-rw-r--r--boost/metaparse/debug_parsing_error.hpp21
-rw-r--r--boost/metaparse/define_error.hpp17
-rw-r--r--boost/metaparse/digit.hpp20
-rw-r--r--boost/metaparse/digit_val.hpp20
-rw-r--r--boost/metaparse/empty.hpp20
-rw-r--r--boost/metaparse/entire_input.hpp20
-rw-r--r--boost/metaparse/error/digit_expected.hpp23
-rw-r--r--boost/metaparse/error/end_of_input_expected.hpp23
-rw-r--r--boost/metaparse/error/index_out_of_range.hpp23
-rw-r--r--boost/metaparse/error/letter_expected.hpp23
-rw-r--r--boost/metaparse/error/literal_expected.hpp24
-rw-r--r--boost/metaparse/error/none_of_the_expected_cases_found.hpp23
-rw-r--r--boost/metaparse/error/unexpected_character.hpp23
-rw-r--r--boost/metaparse/error/unexpected_end_of_input.hpp24
-rw-r--r--boost/metaparse/error/unpaired.hpp23
-rw-r--r--boost/metaparse/error/whitespace_expected.hpp24
-rw-r--r--boost/metaparse/except.hpp20
-rw-r--r--boost/metaparse/fail.hpp20
-rw-r--r--boost/metaparse/fail_at_first_char_expected.hpp20
-rw-r--r--boost/metaparse/fail_tag.hpp21
-rw-r--r--boost/metaparse/first_of.hpp20
-rw-r--r--boost/metaparse/foldl.hpp20
-rw-r--r--boost/metaparse/foldl1.hpp20
-rw-r--r--boost/metaparse/foldl_reject_incomplete.hpp20
-rw-r--r--boost/metaparse/foldl_reject_incomplete1.hpp20
-rw-r--r--boost/metaparse/foldl_reject_incomplete_start_with_parser.hpp20
-rw-r--r--boost/metaparse/foldl_start_with_parser.hpp20
-rw-r--r--boost/metaparse/foldr.hpp20
-rw-r--r--boost/metaparse/foldr1.hpp20
-rw-r--r--boost/metaparse/foldr_reject_incomplete.hpp20
-rw-r--r--boost/metaparse/foldr_reject_incomplete1.hpp20
-rw-r--r--boost/metaparse/foldr_start_with_parser.hpp20
-rw-r--r--boost/metaparse/get_col.hpp20
-rw-r--r--boost/metaparse/get_line.hpp20
-rw-r--r--boost/metaparse/get_message.hpp20
-rw-r--r--boost/metaparse/get_position.hpp20
-rw-r--r--boost/metaparse/get_prev_char.hpp20
-rw-r--r--boost/metaparse/get_remaining.hpp20
-rw-r--r--boost/metaparse/get_result.hpp20
-rw-r--r--boost/metaparse/grammar.hpp19
-rw-r--r--boost/metaparse/if_.hpp20
-rw-r--r--boost/metaparse/int_.hpp20
-rw-r--r--boost/metaparse/is_error.hpp20
-rw-r--r--boost/metaparse/iterate.hpp20
-rw-r--r--boost/metaparse/iterate_c.hpp20
-rw-r--r--boost/metaparse/keyword.hpp20
-rw-r--r--boost/metaparse/last_of.hpp20
-rw-r--r--boost/metaparse/letter.hpp20
-rw-r--r--boost/metaparse/limit_one_char_except_size.hpp15
-rw-r--r--boost/metaparse/limit_one_of_size.hpp14
-rw-r--r--boost/metaparse/limit_sequence_size.hpp14
-rw-r--r--boost/metaparse/limit_string_size.hpp14
-rw-r--r--boost/metaparse/lit.hpp21
-rw-r--r--boost/metaparse/lit_c.hpp21
-rw-r--r--boost/metaparse/look_ahead.hpp20
-rw-r--r--boost/metaparse/middle_of.hpp20
-rw-r--r--boost/metaparse/next_char.hpp20
-rw-r--r--boost/metaparse/next_line.hpp20
-rw-r--r--boost/metaparse/nth_of.hpp20
-rw-r--r--boost/metaparse/nth_of_c.hpp20
-rw-r--r--boost/metaparse/one_char.hpp21
-rw-r--r--boost/metaparse/one_char_except.hpp20
-rw-r--r--boost/metaparse/one_char_except_c.hpp20
-rw-r--r--boost/metaparse/one_of.hpp20
-rw-r--r--boost/metaparse/one_of_c.hpp20
-rw-r--r--boost/metaparse/optional.hpp20
-rw-r--r--boost/metaparse/range.hpp20
-rw-r--r--boost/metaparse/range_c.hpp20
-rw-r--r--boost/metaparse/reject.hpp20
-rw-r--r--boost/metaparse/repeated.hpp20
-rw-r--r--boost/metaparse/repeated1.hpp20
-rw-r--r--boost/metaparse/repeated_one_of.hpp20
-rw-r--r--boost/metaparse/repeated_one_of1.hpp20
-rw-r--r--boost/metaparse/repeated_reject_incomplete.hpp20
-rw-r--r--boost/metaparse/repeated_reject_incomplete1.hpp20
-rw-r--r--boost/metaparse/return_.hpp20
-rw-r--r--boost/metaparse/sequence.hpp20
-rw-r--r--boost/metaparse/sequence_apply.hpp36
-rw-r--r--boost/metaparse/source_position.hpp20
-rw-r--r--boost/metaparse/source_position_tag.hpp20
-rw-r--r--boost/metaparse/space.hpp21
-rw-r--r--boost/metaparse/spaces.hpp20
-rw-r--r--boost/metaparse/start.hpp20
-rw-r--r--boost/metaparse/string.hpp26
-rw-r--r--boost/metaparse/string_tag.hpp20
-rw-r--r--boost/metaparse/token.hpp20
-rw-r--r--boost/metaparse/transform.hpp20
-rw-r--r--boost/metaparse/transform_error.hpp21
-rw-r--r--boost/metaparse/transform_error_message.hpp21
-rw-r--r--boost/metaparse/unless_error.hpp20
-rw-r--r--boost/metaparse/util/digit_to_int.hpp23
-rw-r--r--boost/metaparse/util/digit_to_int_c.hpp23
-rw-r--r--boost/metaparse/util/in_range.hpp23
-rw-r--r--boost/metaparse/util/in_range_c.hpp23
-rw-r--r--boost/metaparse/util/int_to_digit.hpp23
-rw-r--r--boost/metaparse/util/int_to_digit_c.hpp23
-rw-r--r--boost/metaparse/util/is_digit.hpp23
-rw-r--r--boost/metaparse/util/is_lcase_letter.hpp23
-rw-r--r--boost/metaparse/util/is_letter.hpp23
-rw-r--r--boost/metaparse/util/is_ucase_letter.hpp23
-rw-r--r--boost/metaparse/util/is_whitespace.hpp23
-rw-r--r--boost/metaparse/util/is_whitespace_c.hpp23
-rw-r--r--boost/metaparse/v1/accept.hpp36
-rw-r--r--boost/metaparse/v1/accept_tag.hpp47
-rw-r--r--boost/metaparse/v1/accept_when.hpp59
-rw-r--r--boost/metaparse/v1/alphanum.hpp25
-rw-r--r--boost/metaparse/v1/always.hpp51
-rw-r--r--boost/metaparse/v1/always_c.hpp25
-rw-r--r--boost/metaparse/v1/build_parser.hpp66
-rw-r--r--boost/metaparse/v1/change_error_message.hpp39
-rw-r--r--boost/metaparse/v1/debug_parsing_error.hpp105
-rw-r--r--boost/metaparse/v1/define_error.hpp25
-rw-r--r--boost/metaparse/v1/digit.hpp34
-rw-r--r--boost/metaparse/v1/digit_val.hpp26
-rw-r--r--boost/metaparse/v1/empty.hpp42
-rw-r--r--boost/metaparse/v1/entire_input.hpp33
-rw-r--r--boost/metaparse/v1/error/digit_expected.hpp26
-rw-r--r--boost/metaparse/v1/error/end_of_input_expected.hpp29
-rw-r--r--boost/metaparse/v1/error/expected_to_fail.hpp30
-rw-r--r--boost/metaparse/v1/error/index_out_of_range.hpp41
-rw-r--r--boost/metaparse/v1/error/letter_expected.hpp26
-rw-r--r--boost/metaparse/v1/error/literal_expected.hpp36
-rw-r--r--boost/metaparse/v1/error/none_of_the_expected_cases_found.hpp29
-rw-r--r--boost/metaparse/v1/error/unexpected_character.hpp29
-rw-r--r--boost/metaparse/v1/error/unexpected_end_of_input.hpp30
-rw-r--r--boost/metaparse/v1/error/unpaired.hpp50
-rw-r--r--boost/metaparse/v1/error/whitespace_expected.hpp30
-rw-r--r--boost/metaparse/v1/except.hpp40
-rw-r--r--boost/metaparse/v1/fail.hpp30
-rw-r--r--boost/metaparse/v1/fail_at_first_char_expected.hpp58
-rw-r--r--boost/metaparse/v1/fail_tag.hpp42
-rw-r--r--boost/metaparse/v1/first_of.hpp35
-rw-r--r--boost/metaparse/v1/foldl.hpp65
-rw-r--r--boost/metaparse/v1/foldl1.hpp38
-rw-r--r--boost/metaparse/v1/foldl_reject_incomplete.hpp77
-rw-r--r--boost/metaparse/v1/foldl_reject_incomplete1.hpp38
-rw-r--r--boost/metaparse/v1/foldl_reject_incomplete_start_with_parser.hpp55
-rw-r--r--boost/metaparse/v1/foldl_start_with_parser.hpp45
-rw-r--r--boost/metaparse/v1/foldr.hpp25
-rw-r--r--boost/metaparse/v1/foldr1.hpp38
-rw-r--r--boost/metaparse/v1/foldr_reject_incomplete.hpp33
-rw-r--r--boost/metaparse/v1/foldr_reject_incomplete1.hpp38
-rw-r--r--boost/metaparse/v1/foldr_start_with_parser.hpp78
-rw-r--r--boost/metaparse/v1/fwd/accept.hpp22
-rw-r--r--boost/metaparse/v1/fwd/build_parser.hpp22
-rw-r--r--boost/metaparse/v1/fwd/get_col.hpp26
-rw-r--r--boost/metaparse/v1/fwd/get_line.hpp25
-rw-r--r--boost/metaparse/v1/fwd/get_message.hpp25
-rw-r--r--boost/metaparse/v1/fwd/get_position.hpp25
-rw-r--r--boost/metaparse/v1/fwd/get_prev_char.hpp25
-rw-r--r--boost/metaparse/v1/fwd/get_remaining.hpp25
-rw-r--r--boost/metaparse/v1/fwd/get_result.hpp25
-rw-r--r--boost/metaparse/v1/fwd/next_char.hpp25
-rw-r--r--boost/metaparse/v1/fwd/next_line.hpp25
-rw-r--r--boost/metaparse/v1/fwd/reject.hpp22
-rw-r--r--boost/metaparse/v1/fwd/source_position.hpp22
-rw-r--r--boost/metaparse/v1/fwd/string.hpp38
-rw-r--r--boost/metaparse/v1/get_col.hpp29
-rw-r--r--boost/metaparse/v1/get_line.hpp29
-rw-r--r--boost/metaparse/v1/get_message.hpp29
-rw-r--r--boost/metaparse/v1/get_position.hpp29
-rw-r--r--boost/metaparse/v1/get_prev_char.hpp29
-rw-r--r--boost/metaparse/v1/get_remaining.hpp29
-rw-r--r--boost/metaparse/v1/get_result.hpp29
-rw-r--r--boost/metaparse/v1/grammar.hpp386
-rw-r--r--boost/metaparse/v1/if_.hpp43
-rw-r--r--boost/metaparse/v1/impl/apply_parser.hpp63
-rw-r--r--boost/metaparse/v1/impl/assert_string_length.hpp31
-rw-r--r--boost/metaparse/v1/impl/at_c.hpp66
-rw-r--r--boost/metaparse/v1/impl/back_inserter.hpp32
-rw-r--r--boost/metaparse/v1/impl/concat.hpp106
-rw-r--r--boost/metaparse/v1/impl/empty_string.hpp44
-rw-r--r--boost/metaparse/v1/impl/front_inserter.hpp32
-rw-r--r--boost/metaparse/v1/impl/fwd/iterate_impl.hpp34
-rw-r--r--boost/metaparse/v1/impl/has_type.hpp26
-rw-r--r--boost/metaparse/v1/impl/is_any.hpp70
-rw-r--r--boost/metaparse/v1/impl/is_char_c.hpp33
-rw-r--r--boost/metaparse/v1/impl/iterate_impl.hpp46
-rw-r--r--boost/metaparse/v1/impl/iterate_impl_unchecked.hpp44
-rw-r--r--boost/metaparse/v1/impl/later_result.hpp39
-rw-r--r--boost/metaparse/v1/impl/next_digit.hpp36
-rw-r--r--boost/metaparse/v1/impl/no_char.hpp17
-rw-r--r--boost/metaparse/v1/impl/nth_of_c.hpp61
-rw-r--r--boost/metaparse/v1/impl/nth_of_c_impl.hpp77
-rw-r--r--boost/metaparse/v1/impl/one_char_except_not_used.hpp24
-rw-r--r--boost/metaparse/v1/impl/one_of.hpp44
-rw-r--r--boost/metaparse/v1/impl/one_of_fwd_op.hpp46
-rw-r--r--boost/metaparse/v1/impl/pop_back.hpp52
-rw-r--r--boost/metaparse/v1/impl/pop_front.hpp62
-rw-r--r--boost/metaparse/v1/impl/push_back_c.hpp40
-rw-r--r--boost/metaparse/v1/impl/push_front_c.hpp53
-rw-r--r--boost/metaparse/v1/impl/remove_trailing_no_chars.hpp57
-rw-r--r--boost/metaparse/v1/impl/returns.hpp28
-rw-r--r--boost/metaparse/v1/impl/sequence.hpp59
-rw-r--r--boost/metaparse/v1/impl/sequence_impl.hpp37
-rw-r--r--boost/metaparse/v1/impl/size.hpp69
-rw-r--r--boost/metaparse/v1/impl/skip_seq.hpp74
-rw-r--r--boost/metaparse/v1/impl/split_at_c.hpp101
-rw-r--r--boost/metaparse/v1/impl/string_iterator.hpp159
-rw-r--r--boost/metaparse/v1/impl/string_iterator_tag.hpp27
-rw-r--r--boost/metaparse/v1/impl/update_c.hpp93
-rw-r--r--boost/metaparse/v1/impl/void_.hpp25
-rw-r--r--boost/metaparse/v1/int_.hpp25
-rw-r--r--boost/metaparse/v1/is_error.hpp43
-rw-r--r--boost/metaparse/v1/iterate.hpp24
-rw-r--r--boost/metaparse/v1/iterate_c.hpp26
-rw-r--r--boost/metaparse/v1/keyword.hpp82
-rw-r--r--boost/metaparse/v1/last_of.hpp66
-rw-r--r--boost/metaparse/v1/letter.hpp29
-rw-r--r--boost/metaparse/v1/lit.hpp24
-rw-r--r--boost/metaparse/v1/lit_c.hpp34
-rw-r--r--boost/metaparse/v1/look_ahead.hpp50
-rw-r--r--boost/metaparse/v1/middle_of.hpp48
-rw-r--r--boost/metaparse/v1/next_char.hpp30
-rw-r--r--boost/metaparse/v1/next_line.hpp30
-rw-r--r--boost/metaparse/v1/nth_of.hpp39
-rw-r--r--boost/metaparse/v1/nth_of_c.hpp70
-rw-r--r--boost/metaparse/v1/one_char.hpp71
-rw-r--r--boost/metaparse/v1/one_char_except.hpp85
-rw-r--r--boost/metaparse/v1/one_char_except_c.hpp96
-rw-r--r--boost/metaparse/v1/one_of.hpp42
-rw-r--r--boost/metaparse/v1/one_of_c.hpp80
-rw-r--r--boost/metaparse/v1/optional.hpp40
-rw-r--r--boost/metaparse/v1/range.hpp33
-rw-r--r--boost/metaparse/v1/range_c.hpp33
-rw-r--r--boost/metaparse/v1/reject.hpp33
-rw-r--r--boost/metaparse/v1/repeated.hpp27
-rw-r--r--boost/metaparse/v1/repeated1.hpp29
-rw-r--r--boost/metaparse/v1/repeated_one_of.hpp45
-rw-r--r--boost/metaparse/v1/repeated_one_of1.hpp45
-rw-r--r--boost/metaparse/v1/repeated_reject_incomplete.hpp29
-rw-r--r--boost/metaparse/v1/repeated_reject_incomplete1.hpp29
-rw-r--r--boost/metaparse/v1/return_.hpp34
-rw-r--r--boost/metaparse/v1/sequence.hpp64
-rw-r--r--boost/metaparse/v1/sequence_apply.hpp80
-rw-r--r--boost/metaparse/v1/source_position.hpp156
-rw-r--r--boost/metaparse/v1/source_position_tag.hpp80
-rw-r--r--boost/metaparse/v1/space.hpp30
-rw-r--r--boost/metaparse/v1/spaces.hpp24
-rw-r--r--boost/metaparse/v1/start.hpp32
-rw-r--r--boost/metaparse/v1/string.hpp408
-rw-r--r--boost/metaparse/v1/string_tag.hpp24
-rw-r--r--boost/metaparse/v1/swap.hpp29
-rw-r--r--boost/metaparse/v1/token.hpp28
-rw-r--r--boost/metaparse/v1/transform.hpp50
-rw-r--r--boost/metaparse/v1/transform_error.hpp40
-rw-r--r--boost/metaparse/v1/transform_error_message.hpp49
-rw-r--r--boost/metaparse/v1/unless_error.hpp29
-rw-r--r--boost/metaparse/v1/util/digit_to_int.hpp38
-rw-r--r--boost/metaparse/v1/util/digit_to_int_c.hpp40
-rw-r--r--boost/metaparse/v1/util/in_range.hpp75
-rw-r--r--boost/metaparse/v1/util/in_range_c.hpp38
-rw-r--r--boost/metaparse/v1/util/int_to_digit.hpp38
-rw-r--r--boost/metaparse/v1/util/int_to_digit_c.hpp38
-rw-r--r--boost/metaparse/v1/util/is_digit.hpp38
-rw-r--r--boost/metaparse/v1/util/is_lcase_letter.hpp38
-rw-r--r--boost/metaparse/v1/util/is_letter.hpp44
-rw-r--r--boost/metaparse/v1/util/is_ucase_letter.hpp38
-rw-r--r--boost/metaparse/v1/util/is_whitespace.hpp38
-rw-r--r--boost/metaparse/v1/util/is_whitespace_c.hpp32
-rw-r--r--boost/metaparse/version.hpp14
-rw-r--r--boost/move/adl_move_swap.hpp47
-rw-r--r--boost/move/algo/adaptive_merge.hpp67
-rw-r--r--boost/move/algo/adaptive_sort.hpp63
-rw-r--r--boost/move/algo/detail/adaptive_sort_merge.hpp2284
-rw-r--r--boost/move/algo/detail/basic_op.hpp63
-rw-r--r--boost/move/algo/detail/bufferless_merge_sort.hpp120
-rw-r--r--boost/move/algo/detail/insertion_sort.hpp127
-rw-r--r--boost/move/algo/detail/merge.hpp444
-rw-r--r--boost/move/algo/detail/merge_sort.hpp124
-rw-r--r--boost/move/algo/move.hpp155
-rw-r--r--boost/move/algorithm.hpp117
-rw-r--r--boost/move/core.hpp23
-rw-r--r--boost/move/detail/config_begin.hpp2
-rw-r--r--boost/move/detail/destruct_n.hpp67
-rw-r--r--boost/move/detail/iterator_traits.hpp4
-rw-r--r--boost/move/detail/meta_utils.hpp39
-rw-r--r--boost/move/detail/move_helpers.hpp122
-rw-r--r--boost/move/detail/placement_new.hpp30
-rw-r--r--boost/move/detail/workaround.hpp13
-rw-r--r--boost/move/iterator.hpp65
-rw-r--r--boost/move/unique_ptr.hpp98
-rw-r--r--boost/move/utility.hpp15
-rw-r--r--boost/move/utility_core.hpp33
-rw-r--r--boost/mpi/communicator.hpp4
-rw-r--r--boost/mpi/detail/binary_buffer_iprimitive.hpp4
-rw-r--r--boost/mpi/detail/binary_buffer_oprimitive.hpp4
-rw-r--r--boost/mpi/detail/forward_iprimitive.hpp2
-rw-r--r--boost/mpi/detail/forward_oprimitive.hpp2
-rw-r--r--boost/mpi/detail/ignore_iprimitive.hpp2
-rw-r--r--boost/mpi/detail/ignore_oprimitive.hpp2
-rw-r--r--boost/mpi/detail/mpi_datatype_primitive.hpp2
-rw-r--r--boost/mpi/detail/packed_iprimitive.hpp4
-rw-r--r--boost/mpi/detail/packed_oprimitive.hpp2
-rw-r--r--boost/multiprecision/concepts/mp_number_archetypes.hpp4
-rw-r--r--boost/multiprecision/cpp_bin_float.hpp72
-rw-r--r--boost/multiprecision/cpp_dec_float.hpp18
-rw-r--r--boost/multiprecision/cpp_int.hpp6
-rw-r--r--boost/multiprecision/cpp_int/bitwise.hpp426
-rw-r--r--boost/multiprecision/cpp_int/import_export.hpp104
-rw-r--r--boost/multiprecision/debug_adaptor.hpp4
-rw-r--r--boost/multiprecision/detail/bitscan.hpp6
-rw-r--r--boost/multiprecision/detail/default_ops.hpp4
-rw-r--r--boost/multiprecision/detail/functions/pow.hpp9
-rw-r--r--boost/multiprecision/detail/min_max.hpp114
-rw-r--r--boost/multiprecision/detail/number_base.hpp37
-rw-r--r--boost/multiprecision/detail/number_compare.hpp6
-rw-r--r--boost/multiprecision/float128.hpp35
-rw-r--r--boost/multiprecision/mpfi.hpp4
-rw-r--r--boost/multiprecision/mpfr.hpp5
-rw-r--r--boost/multiprecision/number.hpp57
-rw-r--r--boost/multiprecision/tommath.hpp10
-rw-r--r--boost/none.hpp2
-rw-r--r--boost/none_t.hpp5
-rw-r--r--boost/operators.hpp452
-rw-r--r--boost/operators_v1.hpp951
-rw-r--r--boost/optional/detail/old_optional_implementation.hpp1059
-rw-r--r--boost/optional/detail/optional_aligned_storage.hpp75
-rw-r--r--boost/optional/detail/optional_config.hpp99
-rw-r--r--boost/optional/detail/optional_factory_support.hpp36
-rw-r--r--boost/optional/detail/optional_reference_spec.hpp203
-rw-r--r--boost/optional/detail/optional_relops.hpp196
-rw-r--r--boost/optional/detail/optional_swap.hpp117
-rw-r--r--boost/optional/optional.hpp657
-rw-r--r--boost/optional/optional_fwd.hpp13
-rw-r--r--boost/pending/relaxed_heap.hpp5
-rw-r--r--boost/pool/detail/mutex.hpp22
-rw-r--r--boost/predef/hardware/simd.h20
-rw-r--r--boost/predef/hardware/simd/x86.h6
-rw-r--r--boost/predef/hardware/simd/x86_amd.h8
-rw-r--r--boost/predef/hardware/simd/x86_amd/versions.h4
-rw-r--r--boost/predef/os/cygwin.h2
-rw-r--r--boost/predef/version.h4
-rw-r--r--boost/preprocessor/config/config.hpp2
-rw-r--r--boost/property_tree/detail/info_parser_read.hpp2
-rw-r--r--boost/property_tree/detail/json_parser/parser.hpp524
-rw-r--r--boost/property_tree/detail/json_parser/read.hpp55
-rw-r--r--boost/property_tree/detail/ptree_utils.hpp4
-rw-r--r--boost/property_tree/detail/xml_parser_utils.hpp12
-rw-r--r--boost/property_tree/detail/xml_parser_write.hpp18
-rw-r--r--boost/property_tree/detail/xml_parser_writer_settings.hpp6
-rw-r--r--boost/property_tree/json_parser.hpp6
-rw-r--r--boost/property_tree/json_parser/detail/narrow_encoding.hpp (renamed from boost/property_tree/detail/json_parser/narrow_encoding.hpp)13
-rw-r--r--boost/property_tree/json_parser/detail/parser.hpp530
-rw-r--r--boost/property_tree/json_parser/detail/read.hpp90
-rw-r--r--boost/property_tree/json_parser/detail/standard_callbacks.hpp (renamed from boost/property_tree/detail/json_parser/standard_callbacks.hpp)5
-rw-r--r--boost/property_tree/json_parser/detail/wide_encoding.hpp (renamed from boost/property_tree/detail/json_parser/wide_encoding.hpp)17
-rw-r--r--boost/property_tree/json_parser/detail/write.hpp (renamed from boost/property_tree/detail/json_parser_write.hpp)8
-rw-r--r--boost/property_tree/json_parser/error.hpp (renamed from boost/property_tree/detail/json_parser_error.hpp)0
-rw-r--r--boost/python/converter/registered.hpp5
-rw-r--r--boost/python/detail/def_helper.hpp1
-rw-r--r--boost/python/detail/wrap_python.hpp13
-rw-r--r--boost/python/object/class_metadata.hpp12
-rw-r--r--boost/random/uniform_on_sphere.hpp1
-rw-r--r--boost/range/const_iterator.hpp8
-rw-r--r--boost/regex/config.hpp2
-rw-r--r--boost/regex/v4/basic_regex_parser.hpp2
-rw-r--r--boost/regex/v4/fileiter.hpp4
-rw-r--r--boost/regex/v4/match_flags.hpp3
-rw-r--r--boost/regex/v4/mem_block_cache.hpp46
-rw-r--r--boost/serialization/archive_input_unordered_map.hpp16
-rw-r--r--boost/serialization/archive_input_unordered_set.hpp19
-rw-r--r--boost/serialization/array.hpp90
-rw-r--r--boost/serialization/assume_abstract.hpp1
-rw-r--r--boost/serialization/base_object.hpp1
-rw-r--r--boost/serialization/collection_traits.hpp2
-rw-r--r--boost/serialization/detail/stack_constructor.hpp1
-rw-r--r--boost/serialization/export.hpp2
-rw-r--r--boost/serialization/forward_list.hpp13
-rw-r--r--boost/serialization/is_bitwise_serializable.hpp2
-rw-r--r--boost/serialization/map.hpp9
-rw-r--r--boost/serialization/nvp.hpp32
-rw-r--r--boost/serialization/set.hpp7
-rw-r--r--boost/serialization/singleton.hpp26
-rw-r--r--boost/serialization/static_warning.hpp1
-rw-r--r--boost/serialization/traits.hpp2
-rw-r--r--boost/serialization/unique_ptr.hpp4
-rw-r--r--boost/serialization/valarray.hpp18
-rw-r--r--boost/serialization/vector.hpp6
-rw-r--r--boost/serialization/vector_135.hpp2
-rw-r--r--boost/serialization/wrapper.hpp2
-rw-r--r--boost/signals2/detail/variadic_slot_invoker.hpp12
-rw-r--r--boost/smart_ptr/detail/up_if_array.hpp26
-rw-r--r--boost/smart_ptr/detail/up_if_not_array.hpp31
-rw-r--r--boost/smart_ptr/make_unique.hpp108
-rw-r--r--boost/smart_ptr/make_unique_array.hpp31
-rw-r--r--boost/smart_ptr/make_unique_object.hpp45
-rw-r--r--boost/smart_ptr/shared_ptr.hpp2
-rw-r--r--boost/sort/spreadsort/detail/string_sort.hpp2
-rw-r--r--boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp6
-rw-r--r--boost/spirit/home/classic/core/non_terminal/impl/rule.ipp1
-rw-r--r--boost/spirit/home/classic/core/non_terminal/impl/subrule.ipp2
-rw-r--r--boost/spirit/home/classic/core/non_terminal/subrule.hpp3
-rw-r--r--boost/spirit/home/classic/iterator/position_iterator.hpp2
-rw-r--r--boost/spirit/home/classic/tree/parse_tree_utils.hpp2
-rw-r--r--boost/spirit/home/qi/string/tst_map.hpp3
-rw-r--r--boost/spirit/home/support/extended_variant.hpp5
-rw-r--r--boost/spirit/home/support/terminal.hpp11
-rw-r--r--boost/spirit/home/x3/auxiliary/eol.hpp2
-rw-r--r--boost/spirit/home/x3/binary/binary.hpp1
-rw-r--r--boost/spirit/home/x3/char/any_char.hpp2
-rw-r--r--boost/spirit/home/x3/core/parse.hpp3
-rw-r--r--boost/spirit/home/x3/directive/expect.hpp32
-rw-r--r--boost/spirit/home/x3/directive/with.hpp2
-rw-r--r--boost/spirit/home/x3/nonterminal/detail/rule.hpp23
-rw-r--r--boost/spirit/home/x3/nonterminal/detail/transform_attribute.hpp8
-rw-r--r--boost/spirit/home/x3/nonterminal/simple_trace.hpp2
-rw-r--r--boost/spirit/home/x3/operator/detail/sequence.hpp26
-rw-r--r--boost/spirit/home/x3/string/literal_string.hpp16
-rw-r--r--boost/spirit/home/x3/string/symbols.hpp4
-rw-r--r--boost/spirit/home/x3/support/ast/variant.hpp5
-rw-r--r--boost/spirit/home/x3/support/traits/container_traits.hpp87
-rw-r--r--boost/spirit/home/x3/support/traits/move_to.hpp32
-rw-r--r--boost/test/data/for_each_sample.hpp54
-rw-r--r--boost/test/data/index_sequence.hpp62
-rw-r--r--boost/test/data/monomorphic/fwd.hpp3
-rw-r--r--boost/test/data/monomorphic/grid.hpp71
-rw-r--r--boost/test/data/monomorphic/sample_merge.hpp103
-rw-r--r--boost/test/data/monomorphic/zip.hpp64
-rw-r--r--boost/test/data/test_case.hpp114
-rw-r--r--boost/test/data/traits.hpp87
-rw-r--r--boost/test/impl/debug.ipp44
-rw-r--r--boost/test/impl/execution_monitor.ipp12
-rw-r--r--boost/test/impl/framework.ipp20
-rw-r--r--boost/test/impl/xml_report_formatter.ipp2
-rw-r--r--boost/test/tools/collection_comparison_op.hpp10
-rw-r--r--boost/test/tools/detail/print_helper.hpp6
-rw-r--r--boost/test/tools/interface.hpp21
-rw-r--r--boost/test/utils/named_params.hpp2
-rw-r--r--boost/thread/future.hpp147
-rw-r--r--boost/thread/futures/launch.hpp1
-rw-r--r--boost/thread/pthread/condition_variable.hpp7
-rw-r--r--boost/thread/scoped_thread.hpp3
-rw-r--r--boost/thread/win32/thread_primitives.hpp6
-rw-r--r--boost/type_index/stl_type_index.hpp4
-rw-r--r--boost/type_traits.hpp256
-rw-r--r--boost/type_traits/add_reference.hpp6
-rw-r--r--boost/type_traits/aligned_storage.hpp12
-rw-r--r--boost/type_traits/common_type.hpp1
-rw-r--r--boost/type_traits/detail/common_arithmetic_type.hpp6
-rw-r--r--boost/type_traits/detail/mp_defer.hpp6
-rw-r--r--boost/type_traits/has_nothrow_assign.hpp2
-rw-r--r--boost/type_traits/has_nothrow_constructor.hpp2
-rw-r--r--boost/type_traits/has_trivial_assign.hpp2
-rw-r--r--boost/type_traits/has_trivial_destructor.hpp2
-rw-r--r--boost/type_traits/is_default_constructible.hpp21
-rw-r--r--boost/type_traits/is_nothrow_move_assignable.hpp2
-rw-r--r--boost/type_traits/is_nothrow_move_constructible.hpp2
-rw-r--r--boost/units/io.hpp2
-rw-r--r--boost/utility/string_view.hpp670
-rw-r--r--boost/utility/string_view_fwd.hpp39
-rw-r--r--boost/variant/recursive_wrapper_fwd.hpp1
-rw-r--r--boost/version.hpp4
1681 files changed, 120993 insertions, 9513 deletions
diff --git a/boost/align.hpp b/boost/align.hpp
index ce8f78d..89eebe1 100644
--- a/boost/align.hpp
+++ b/boost/align.hpp
@@ -10,6 +10,8 @@ http://boost.org/LICENSE_1_0.txt
#define BOOST_ALIGN_HPP
#include <boost/align/align.hpp>
+#include <boost/align/align_down.hpp>
+#include <boost/align/align_up.hpp>
#include <boost/align/aligned_alloc.hpp>
#include <boost/align/aligned_allocator.hpp>
#include <boost/align/aligned_allocator_adaptor.hpp>
diff --git a/boost/align/align.hpp b/boost/align/align.hpp
index 648a65e..3582dcc 100644
--- a/boost/align/align.hpp
+++ b/boost/align/align.hpp
@@ -1,5 +1,5 @@
/*
-(c) 2014 Glen Joseph Fernandes
+(c) 2014-2015 Glen Joseph Fernandes
<glenjofe -at- gmail.com>
Distributed under the Boost Software
diff --git a/boost/align/align_down.hpp b/boost/align/align_down.hpp
new file mode 100644
index 0000000..f437f8e
--- /dev/null
+++ b/boost/align/align_down.hpp
@@ -0,0 +1,27 @@
+/*
+(c) 2015 Glen Joseph Fernandes
+<glenjofe -at- gmail.com>
+
+Distributed under the Boost Software
+License, Version 1.0.
+http://boost.org/LICENSE_1_0.txt
+*/
+#ifndef BOOST_ALIGN_ALIGN_DOWN_HPP
+#define BOOST_ALIGN_ALIGN_DOWN_HPP
+
+#include <boost/align/detail/align_down.hpp>
+#include <boost/align/align_down_forward.hpp>
+
+namespace boost {
+namespace alignment {
+
+BOOST_CONSTEXPR inline std::size_t align_down(std::size_t value,
+ std::size_t alignment) BOOST_NOEXCEPT
+{
+ return value & ~(alignment - 1);
+}
+
+} /* .alignment */
+} /* .boost */
+
+#endif
diff --git a/boost/align/align_down_forward.hpp b/boost/align/align_down_forward.hpp
new file mode 100644
index 0000000..6d124e8
--- /dev/null
+++ b/boost/align/align_down_forward.hpp
@@ -0,0 +1,24 @@
+/*
+(c) 2015 Glen Joseph Fernandes
+<glenjofe -at- gmail.com>
+
+Distributed under the Boost Software
+License, Version 1.0.
+http://boost.org/LICENSE_1_0.txt
+*/
+#ifndef BOOST_ALIGN_ALIGN_DOWN_FORWARD_HPP
+#define BOOST_ALIGN_ALIGN_DOWN_FORWARD_HPP
+
+#include <boost/config.hpp>
+#include <cstddef>
+
+namespace boost {
+namespace alignment {
+
+BOOST_CONSTEXPR std::size_t align_down(std::size_t value,
+ std::size_t alignment) BOOST_NOEXCEPT;
+
+} /* .alignment */
+} /* .boost */
+
+#endif
diff --git a/boost/align/align_up.hpp b/boost/align/align_up.hpp
new file mode 100644
index 0000000..b1cec19
--- /dev/null
+++ b/boost/align/align_up.hpp
@@ -0,0 +1,27 @@
+/*
+(c) 2015 Glen Joseph Fernandes
+<glenjofe -at- gmail.com>
+
+Distributed under the Boost Software
+License, Version 1.0.
+http://boost.org/LICENSE_1_0.txt
+*/
+#ifndef BOOST_ALIGN_ALIGN_UP_HPP
+#define BOOST_ALIGN_ALIGN_UP_HPP
+
+#include <boost/align/detail/align_up.hpp>
+#include <boost/align/align_up_forward.hpp>
+
+namespace boost {
+namespace alignment {
+
+BOOST_CONSTEXPR inline std::size_t align_up(std::size_t value,
+ std::size_t alignment) BOOST_NOEXCEPT
+{
+ return (value + alignment - 1) & ~(alignment - 1);
+}
+
+} /* .alignment */
+} /* .boost */
+
+#endif
diff --git a/boost/align/align_up_forward.hpp b/boost/align/align_up_forward.hpp
new file mode 100644
index 0000000..47fdfcd
--- /dev/null
+++ b/boost/align/align_up_forward.hpp
@@ -0,0 +1,24 @@
+/*
+(c) 2015 Glen Joseph Fernandes
+<glenjofe -at- gmail.com>
+
+Distributed under the Boost Software
+License, Version 1.0.
+http://boost.org/LICENSE_1_0.txt
+*/
+#ifndef BOOST_ALIGN_ALIGN_UP_FORWARD_HPP
+#define BOOST_ALIGN_ALIGN_UP_FORWARD_HPP
+
+#include <boost/config.hpp>
+#include <cstddef>
+
+namespace boost {
+namespace alignment {
+
+BOOST_CONSTEXPR std::size_t align_up(std::size_t value,
+ std::size_t alignment) BOOST_NOEXCEPT;
+
+} /* .alignment */
+} /* .boost */
+
+#endif
diff --git a/boost/align/aligned_alloc.hpp b/boost/align/aligned_alloc.hpp
index b70f4bc..7f2c0bb 100644
--- a/boost/align/aligned_alloc.hpp
+++ b/boost/align/aligned_alloc.hpp
@@ -1,5 +1,5 @@
/*
-(c) 2014 Glen Joseph Fernandes
+(c) 2014-2015 Glen Joseph Fernandes
<glenjofe -at- gmail.com>
Distributed under the Boost Software
@@ -19,7 +19,9 @@ http://boost.org/LICENSE_1_0.txt
#include <AvailabilityMacros.h>
#endif
-#if defined(_MSC_VER)
+#if defined(BOOST_ALIGN_USE_ALLOCATE)
+#include <boost/align/detail/aligned_alloc.hpp>
+#elif defined(_MSC_VER) && !defined(UNDER_CE)
#include <boost/align/detail/aligned_alloc_msvc.hpp>
#elif defined(__MINGW32__) && (__MSVCRT_VERSION__ >= 0x0700)
#include <boost/align/detail/aligned_alloc_msvc.hpp>
diff --git a/boost/align/aligned_allocator.hpp b/boost/align/aligned_allocator.hpp
index 9655e3d..83af070 100644
--- a/boost/align/aligned_allocator.hpp
+++ b/boost/align/aligned_allocator.hpp
@@ -9,16 +9,15 @@ http://boost.org/LICENSE_1_0.txt
#ifndef BOOST_ALIGN_ALIGNED_ALLOCATOR_HPP
#define BOOST_ALIGN_ALIGNED_ALLOCATOR_HPP
-#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_constant.hpp>
#include <boost/align/detail/max_objects.hpp>
#include <boost/align/detail/max_size.hpp>
+#include <boost/align/aligned_alloc.hpp>
+#include <boost/align/aligned_allocator_forward.hpp>
+#include <boost/align/alignment_of.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/throw_exception.hpp>
#include <new>
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
@@ -72,15 +71,17 @@ public:
return detail::addressof(value);
}
- const_pointer address(const_reference value) const
- BOOST_NOEXCEPT {
+ const_pointer address(const_reference value) const BOOST_NOEXCEPT {
return detail::addressof(value);
}
pointer allocate(size_type size, const_void_pointer = 0) {
- void* p = aligned_alloc(min_align, sizeof(T) * size);
- if (size > 0 && !p) {
- ::boost::throw_exception(std::bad_alloc());
+ void* p = 0;
+ if (size > 0) {
+ p = aligned_alloc(min_align, sizeof(T) * size);
+ if (!p) {
+ ::boost::throw_exception(std::bad_alloc());
+ }
}
return static_cast<T*>(p);
}
@@ -97,28 +98,24 @@ public:
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template<class U, class... Args>
void construct(U* ptr, Args&&... args) {
- void* p = ptr;
- ::new(p) U(std::forward<Args>(args)...);
+ ::new(static_cast<void*>(ptr)) U(std::forward<Args>(args)...);
}
#else
template<class U, class V>
void construct(U* ptr, V&& value) {
- void* p = ptr;
- ::new(p) U(std::forward<V>(value));
+ ::new(static_cast<void*>(ptr)) U(std::forward<V>(value));
}
#endif
#else
template<class U, class V>
void construct(U* ptr, const V& value) {
- void* p = ptr;
- ::new(p) U(value);
+ ::new(static_cast<void*>(ptr)) U(value);
}
#endif
template<class U>
void construct(U* ptr) {
- void* p = ptr;
- ::new(p) U();
+ ::new(static_cast<void*>(ptr)) U();
}
template<class U>
@@ -145,17 +142,15 @@ public:
};
template<class T1, class T2, std::size_t Alignment>
-inline bool operator==(const aligned_allocator<T1,
- Alignment>&, const aligned_allocator<T2,
- Alignment>&) BOOST_NOEXCEPT
+inline bool operator==(const aligned_allocator<T1, Alignment>&,
+ const aligned_allocator<T2, Alignment>&) BOOST_NOEXCEPT
{
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
+inline bool operator!=(const aligned_allocator<T1, Alignment>&,
+ const aligned_allocator<T2, Alignment>&) BOOST_NOEXCEPT
{
return false;
}
diff --git a/boost/align/aligned_allocator_adaptor.hpp b/boost/align/aligned_allocator_adaptor.hpp
index 1977717..29d1387 100644
--- a/boost/align/aligned_allocator_adaptor.hpp
+++ b/boost/align/aligned_allocator_adaptor.hpp
@@ -9,15 +9,14 @@ http://boost.org/LICENSE_1_0.txt
#ifndef BOOST_ALIGN_ALIGNED_ALLOCATOR_ADAPTOR_HPP
#define BOOST_ALIGN_ALIGNED_ALLOCATOR_ADAPTOR_HPP
-#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_constant.hpp>
#include <boost/align/detail/max_align.hpp>
#include <boost/align/detail/max_size.hpp>
+#include <boost/align/align.hpp>
+#include <boost/align/aligned_allocator_adaptor_forward.hpp>
+#include <boost/align/alignment_of.hpp>
+#include <boost/static_assert.hpp>
#include <new>
#if !defined(BOOST_NO_CXX11_ALLOCATOR)
@@ -54,10 +53,6 @@ class aligned_allocator_adaptor
typedef typename char_alloc::pointer char_ptr;
#endif
- enum {
- ptr_align = alignment_of<char_ptr>::value
- };
-
public:
#if !defined(BOOST_NO_CXX11_ALLOCATOR)
typedef typename traits::value_type value_type;
@@ -127,44 +122,44 @@ public:
}
pointer allocate(size_type size) {
- std::size_t n1 = size * sizeof(value_type);
- std::size_t n2 = n1 + min_align - ptr_align;
+ std::size_t s = size * sizeof(value_type);
+ std::size_t n = s + min_align - 1;
char_alloc a(base());
- char_ptr p1 = a.allocate(sizeof p1 + n2);
- void* p2 = detail::addressof(*p1) + sizeof p1;
- (void)align(min_align, n1, p2, n2);
- void* p3 = static_cast<char_ptr*>(p2) - 1;
- ::new(p3) char_ptr(p1);
- return static_cast<pointer>(p2);
+ char_ptr p = a.allocate(sizeof p + n);
+ void* r = detail::addressof(*p) + sizeof p;
+ (void)align(min_align, s, r, n);
+ ::new(static_cast<void*>(static_cast<char_ptr*>(r) -
+ 1)) char_ptr(p);
+ return static_cast<pointer>(r);
}
pointer allocate(size_type size, const_void_pointer hint) {
- std::size_t n1 = size * sizeof(value_type);
- std::size_t n2 = n1 + min_align - ptr_align;
+ std::size_t s = size * sizeof(value_type);
+ std::size_t n = s + min_align - 1;
char_ptr h = char_ptr();
if (hint) {
h = *(static_cast<const char_ptr*>(hint) - 1);
}
char_alloc a(base());
#if !defined(BOOST_NO_CXX11_ALLOCATOR)
- char_ptr p1 = char_traits::allocate(a, sizeof p1 + n2, h);
+ char_ptr p = char_traits::allocate(a, sizeof p + n, h);
#else
- char_ptr p1 = a.allocate(sizeof p1 + n2, h);
+ char_ptr p = a.allocate(sizeof p + n, h);
#endif
- void* p2 = detail::addressof(*p1) + sizeof p1;
- (void)align(min_align, n1, p2, n2);
- void* p3 = static_cast<char_ptr*>(p2) - 1;
- ::new(p3) char_ptr(p1);
- return static_cast<pointer>(p2);
+ void* r = detail::addressof(*p) + sizeof p;
+ (void)align(min_align, s, r, n);
+ ::new(static_cast<void*>(static_cast<char_ptr*>(r) -
+ 1)) char_ptr(p);
+ return static_cast<pointer>(r);
}
void deallocate(pointer ptr, size_type size) {
- char_ptr* p1 = reinterpret_cast<char_ptr*>(ptr) - 1;
- char_ptr p2 = *p1;
- p1->~char_ptr();
+ char_ptr* p = reinterpret_cast<char_ptr*>(ptr) - 1;
+ char_ptr r = *p;
+ p->~char_ptr();
char_alloc a(base());
- a.deallocate(p2, size * sizeof(value_type) +
- min_align - ptr_align + sizeof p2);
+ a.deallocate(r, sizeof r + size * sizeof(value_type) +
+ min_align - 1);
}
};
diff --git a/boost/align/aligned_delete.hpp b/boost/align/aligned_delete.hpp
index c8ad64e..6db2bd8 100644
--- a/boost/align/aligned_delete.hpp
+++ b/boost/align/aligned_delete.hpp
@@ -1,5 +1,5 @@
/*
-(c) 2014 Glen Joseph Fernandes
+(c) 2014-2015 Glen Joseph Fernandes
<glenjofe -at- gmail.com>
Distributed under the Boost Software
@@ -9,15 +9,13 @@ http://boost.org/LICENSE_1_0.txt
#ifndef BOOST_ALIGN_ALIGNED_DELETE_HPP
#define BOOST_ALIGN_ALIGNED_DELETE_HPP
-#include <boost/config.hpp>
#include <boost/align/aligned_alloc.hpp>
#include <boost/align/aligned_delete_forward.hpp>
namespace boost {
namespace alignment {
-class aligned_delete {
-public:
+struct aligned_delete {
template<class T>
void operator()(T* ptr) const
BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(ptr->~T())) {
diff --git a/boost/align/aligned_delete_forward.hpp b/boost/align/aligned_delete_forward.hpp
index 375e576..7334beb 100644
--- a/boost/align/aligned_delete_forward.hpp
+++ b/boost/align/aligned_delete_forward.hpp
@@ -1,5 +1,5 @@
/*
-(c) 2014 Glen Joseph Fernandes
+(c) 2014-2015 Glen Joseph Fernandes
<glenjofe -at- gmail.com>
Distributed under the Boost Software
@@ -12,7 +12,7 @@ http://boost.org/LICENSE_1_0.txt
namespace boost {
namespace alignment {
-class aligned_delete;
+struct aligned_delete;
} /* .alignment */
} /* .boost */
diff --git a/boost/align/alignment_of.hpp b/boost/align/alignment_of.hpp
index 2531ced..fee9183 100644
--- a/boost/align/alignment_of.hpp
+++ b/boost/align/alignment_of.hpp
@@ -9,9 +9,8 @@ http://boost.org/LICENSE_1_0.txt
#ifndef BOOST_ALIGN_ALIGNMENT_OF_HPP
#define BOOST_ALIGN_ALIGNMENT_OF_HPP
-#include <boost/config.hpp>
+#include <boost/align/detail/element_type.hpp>
#include <boost/align/alignment_of_forward.hpp>
-#include <boost/align/detail/remove_traits.hpp>
#if defined(BOOST_MSVC)
#include <boost/align/detail/alignment_of_msvc.hpp>
@@ -41,12 +40,14 @@ namespace alignment {
template<class T>
struct alignment_of
: detail::alignment_of<typename
- detail::remove_cv<typename
- detail::remove_all_extents<typename
- detail::remove_reference<T>::
- type>::type>::type>::type {
+ detail::element_type<T>::type>::type {
};
+#if !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
+template<class T>
+constexpr std::size_t alignment_of_v = alignment_of<T>::value;
+#endif
+
} /* .alignment */
} /* .boost */
diff --git a/boost/align/detail/address.hpp b/boost/align/detail/address.hpp
deleted file mode 100644
index b38e571..0000000
--- a/boost/align/detail/address.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-(c) 2014 Glen Joseph Fernandes
-<glenjofe -at- gmail.com>
-
-Distributed under the Boost Software
-License, Version 1.0.
-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;
-#else
-typedef std::size_t address;
-#endif
-
-} /* .detail */
-} /* .alignment */
-} /* .boost */
-
-#endif
diff --git a/boost/align/detail/align.hpp b/boost/align/detail/align.hpp
index d2404b3..0828c58 100644
--- a/boost/align/detail/align.hpp
+++ b/boost/align/detail/align.hpp
@@ -9,10 +9,8 @@ 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>
+#include <boost/assert.hpp>
namespace boost {
namespace alignment {
@@ -21,17 +19,17 @@ 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(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;
+ if (size <= space) {
+ char* p = reinterpret_cast<char*>((reinterpret_cast<std::
+ size_t>(ptr) + alignment - 1) & ~(alignment - 1));
+ std::ptrdiff_t n = p - static_cast<char*>(ptr);
+ if (size <= space - n) {
+ ptr = p;
+ space -= n;
+ return p;
+ }
}
- return p;
+ return 0;
}
} /* .alignment */
diff --git a/boost/align/detail/align_down.hpp b/boost/align/detail/align_down.hpp
new file mode 100644
index 0000000..a7a72ef
--- /dev/null
+++ b/boost/align/detail/align_down.hpp
@@ -0,0 +1,29 @@
+/*
+(c) 2015 Glen Joseph Fernandes
+<glenjofe -at- gmail.com>
+
+Distributed under the Boost Software
+License, Version 1.0.
+http://boost.org/LICENSE_1_0.txt
+*/
+#ifndef BOOST_ALIGN_DETAIL_ALIGN_DOWN_HPP
+#define BOOST_ALIGN_DETAIL_ALIGN_DOWN_HPP
+
+#include <boost/align/detail/is_alignment.hpp>
+#include <boost/align/align_down_forward.hpp>
+#include <boost/assert.hpp>
+
+namespace boost {
+namespace alignment {
+
+inline void* align_down(void* ptr, std::size_t alignment) BOOST_NOEXCEPT
+{
+ BOOST_ASSERT(detail::is_alignment(alignment));
+ return reinterpret_cast<void*>(align_down(reinterpret_cast<std::
+ size_t>(ptr), alignment));
+}
+
+} /* .alignment */
+} /* .boost */
+
+#endif
diff --git a/boost/align/detail/align_up.hpp b/boost/align/detail/align_up.hpp
new file mode 100644
index 0000000..d52e099
--- /dev/null
+++ b/boost/align/detail/align_up.hpp
@@ -0,0 +1,29 @@
+/*
+(c) 2015 Glen Joseph Fernandes
+<glenjofe -at- gmail.com>
+
+Distributed under the Boost Software
+License, Version 1.0.
+http://boost.org/LICENSE_1_0.txt
+*/
+#ifndef BOOST_ALIGN_DETAIL_ALIGN_UP_HPP
+#define BOOST_ALIGN_DETAIL_ALIGN_UP_HPP
+
+#include <boost/align/detail/is_alignment.hpp>
+#include <boost/align/align_up_forward.hpp>
+#include <boost/assert.hpp>
+
+namespace boost {
+namespace alignment {
+
+inline void* align_up(void* ptr, std::size_t alignment) BOOST_NOEXCEPT
+{
+ BOOST_ASSERT(detail::is_alignment(alignment));
+ return reinterpret_cast<void*>(align_up(reinterpret_cast<std::
+ size_t>(ptr), alignment));
+}
+
+} /* .alignment */
+} /* .boost */
+
+#endif
diff --git a/boost/align/detail/aligned_alloc.hpp b/boost/align/detail/aligned_alloc.hpp
index 28c0d29..0488847 100644
--- a/boost/align/detail/aligned_alloc.hpp
+++ b/boost/align/detail/aligned_alloc.hpp
@@ -9,11 +9,10 @@ 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/detail/is_alignment.hpp>
#include <boost/align/align.hpp>
#include <boost/align/alignment_of.hpp>
-#include <boost/align/detail/is_alignment.hpp>
+#include <boost/assert.hpp>
#include <cstdlib>
namespace boost {
@@ -24,27 +23,26 @@ inline void* aligned_alloc(std::size_t alignment, std::size_t size)
{
BOOST_ASSERT(detail::is_alignment(alignment));
enum {
- N = alignment_of<void*>::value
+ min_align = alignment_of<void*>::value
};
- if (alignment < N) {
- alignment = N;
+ if (alignment < min_align) {
+ alignment = min_align;
}
- std::size_t n = size + alignment - N;
- 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;
+ std::size_t n = size + alignment - min_align;
+ void* r = 0;
+ void* p = std::malloc(sizeof(void*) + n);
+ if (p) {
+ r = static_cast<char*>(p) + sizeof p;
+ (void)align(alignment, size, r, n);
+ *(static_cast<void**>(r) - 1) = p;
}
- return p1;
+ return r;
}
inline void aligned_free(void* ptr) BOOST_NOEXCEPT
{
if (ptr) {
- void* p = *(static_cast<void**>(ptr) - 1);
- std::free(p);
+ std::free(*(static_cast<void**>(ptr) - 1));
}
}
diff --git a/boost/align/detail/aligned_alloc_android.hpp b/boost/align/detail/aligned_alloc_android.hpp
index 2381d8b..0ed28a4 100644
--- a/boost/align/detail/aligned_alloc_android.hpp
+++ b/boost/align/detail/aligned_alloc_android.hpp
@@ -9,10 +9,8 @@ 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 <boost/assert.hpp>
#include <malloc.h>
namespace boost {
diff --git a/boost/align/detail/aligned_alloc_macos.hpp b/boost/align/detail/aligned_alloc_macos.hpp
index da3270b..0bdb7c2 100644
--- a/boost/align/detail/aligned_alloc_macos.hpp
+++ b/boost/align/detail/aligned_alloc_macos.hpp
@@ -9,10 +9,8 @@ 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 <boost/assert.hpp>
#include <stdlib.h>
namespace boost {
diff --git a/boost/align/detail/aligned_alloc_msvc.hpp b/boost/align/detail/aligned_alloc_msvc.hpp
index 92f4291..abeccfc 100644
--- a/boost/align/detail/aligned_alloc_msvc.hpp
+++ b/boost/align/detail/aligned_alloc_msvc.hpp
@@ -9,10 +9,8 @@ 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 <boost/assert.hpp>
#include <malloc.h>
namespace boost {
diff --git a/boost/align/detail/aligned_alloc_posix.hpp b/boost/align/detail/aligned_alloc_posix.hpp
index df64d75..931b0c4 100644
--- a/boost/align/detail/aligned_alloc_posix.hpp
+++ b/boost/align/detail/aligned_alloc_posix.hpp
@@ -9,10 +9,8 @@ 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 <boost/assert.hpp>
#include <stdlib.h>
namespace boost {
diff --git a/boost/align/detail/aligned_alloc_sunos.hpp b/boost/align/detail/aligned_alloc_sunos.hpp
index 0114597..5039c73 100644
--- a/boost/align/detail/aligned_alloc_sunos.hpp
+++ b/boost/align/detail/aligned_alloc_sunos.hpp
@@ -9,10 +9,8 @@ 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 <boost/assert.hpp>
#include <stdlib.h>
namespace boost {
diff --git a/boost/align/detail/assume_aligned.hpp b/boost/align/detail/assume_aligned.hpp
index cf77086..a1c632b 100644
--- a/boost/align/detail/assume_aligned.hpp
+++ b/boost/align/detail/assume_aligned.hpp
@@ -12,6 +12,6 @@ http://boost.org/LICENSE_1_0.txt
#ifndef BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_HPP
#define BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_HPP
-#define BOOST_ALIGN_ASSUME_ALIGNED(ptr, alignment)
+#define BOOST_ALIGN_ASSUME_ALIGNED(p, n)
#endif
diff --git a/boost/align/detail/assume_aligned_clang.hpp b/boost/align/detail/assume_aligned_clang.hpp
index 2ba41c6..76046ef 100644
--- a/boost/align/detail/assume_aligned_clang.hpp
+++ b/boost/align/detail/assume_aligned_clang.hpp
@@ -10,10 +10,10 @@ http://boost.org/LICENSE_1_0.txt
#define BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_CLANG_HPP
#if __has_builtin(__builtin_assume_aligned)
-#define BOOST_ALIGN_ASSUME_ALIGNED(ptr, alignment) \
-(ptr) = __builtin_assume_aligned((ptr), (alignment))
+#define BOOST_ALIGN_ASSUME_ALIGNED(p, n) \
+(p) = static_cast<__typeof__(p)>(__builtin_assume_aligned((p), (n)))
#else
-#define BOOST_ALIGN_ASSUME_ALIGNED(ptr, alignment)
+#define BOOST_ALIGN_ASSUME_ALIGNED(p, n)
#endif
#endif
diff --git a/boost/align/detail/assume_aligned_gcc.hpp b/boost/align/detail/assume_aligned_gcc.hpp
index f7a5458..38fab66 100644
--- a/boost/align/detail/assume_aligned_gcc.hpp
+++ b/boost/align/detail/assume_aligned_gcc.hpp
@@ -12,7 +12,7 @@ http://boost.org/LICENSE_1_0.txt
#ifndef BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_GCC_HPP
#define BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_GCC_HPP
-#define BOOST_ALIGN_ASSUME_ALIGNED(ptr, alignment) \
-(ptr) = __builtin_assume_aligned((ptr), (alignment))
+#define BOOST_ALIGN_ASSUME_ALIGNED(p, n) \
+(p) = static_cast<__typeof__(p)>(__builtin_assume_aligned((p), (n)))
#endif
diff --git a/boost/align/detail/assume_aligned_intel.hpp b/boost/align/detail/assume_aligned_intel.hpp
index e9ec2db..1944f3d 100644
--- a/boost/align/detail/assume_aligned_intel.hpp
+++ b/boost/align/detail/assume_aligned_intel.hpp
@@ -12,7 +12,7 @@ http://boost.org/LICENSE_1_0.txt
#ifndef BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_INTEL_HPP
#define BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_INTEL_HPP
-#define BOOST_ALIGN_ASSUME_ALIGNED(ptr, alignment) \
-__assume_aligned((ptr), (alignment))
+#define BOOST_ALIGN_ASSUME_ALIGNED(p, n) \
+__assume_aligned((p), (n))
#endif
diff --git a/boost/align/detail/assume_aligned_msvc.hpp b/boost/align/detail/assume_aligned_msvc.hpp
index 97c1fb1..84c4d59 100644
--- a/boost/align/detail/assume_aligned_msvc.hpp
+++ b/boost/align/detail/assume_aligned_msvc.hpp
@@ -12,9 +12,9 @@ http://boost.org/LICENSE_1_0.txt
#ifndef BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_MSVC_HPP
#define BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_MSVC_HPP
-#include <stddef.h>
+#include <cstddef>
-#define BOOST_ALIGN_ASSUME_ALIGNED(ptr, alignment) \
-__assume((uintptr_t(ptr) & ((alignment) - 1)) == 0)
+#define BOOST_ALIGN_ASSUME_ALIGNED(p, n) \
+__assume((reinterpret_cast<std::size_t>(p) & ((n) - 1)) == 0)
#endif
diff --git a/boost/align/detail/remove_traits.hpp b/boost/align/detail/element_type.hpp
index 86a98d4..793e25e 100644
--- a/boost/align/detail/remove_traits.hpp
+++ b/boost/align/detail/element_type.hpp
@@ -1,13 +1,13 @@
/*
-(c) 2014 Glen Joseph Fernandes
+(c) 2015 Glen Joseph Fernandes
<glenjofe -at- gmail.com>
Distributed under the Boost Software
License, Version 1.0.
http://boost.org/LICENSE_1_0.txt
*/
-#ifndef BOOST_ALIGN_DETAIL_REMOVE_TRAITS_HPP
-#define BOOST_ALIGN_DETAIL_REMOVE_TRAITS_HPP
+#ifndef BOOST_ALIGN_DETAIL_ELEMENT_TYPE_HPP
+#define BOOST_ALIGN_DETAIL_ELEMENT_TYPE_HPP
#include <boost/config.hpp>
@@ -22,9 +22,14 @@ 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;
+template<class T>
+struct element_type {
+ typedef typename
+ std::remove_cv<typename
+ std::remove_all_extents<typename
+ std::remove_reference<T>::
+ type>::type>::type type;
+};
#else
template<class T>
struct remove_reference {
@@ -83,6 +88,15 @@ struct remove_cv {
typedef typename remove_volatile<typename
remove_const<T>::type>::type type;
};
+
+template<class T>
+struct element_type {
+ typedef typename
+ remove_cv<typename
+ remove_all_extents<typename
+ remove_reference<T>::
+ type>::type>::type type;
+};
#endif
} /* .detail */
diff --git a/boost/align/detail/is_aligned.hpp b/boost/align/detail/is_aligned.hpp
index cb45be3..e9c97ec 100644
--- a/boost/align/detail/is_aligned.hpp
+++ b/boost/align/detail/is_aligned.hpp
@@ -9,20 +9,25 @@ 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>
+#include <boost/align/is_aligned_forward.hpp>
+#include <boost/assert.hpp>
namespace boost {
namespace alignment {
+inline bool is_aligned(const void* ptr, std::size_t alignment)
+ BOOST_NOEXCEPT
+{
+ BOOST_ASSERT(detail::is_alignment(alignment));
+ return is_aligned(reinterpret_cast<std::size_t>(ptr), alignment);
+}
+
inline bool is_aligned(std::size_t alignment, const void* ptr)
BOOST_NOEXCEPT
{
BOOST_ASSERT(detail::is_alignment(alignment));
- return (detail::address(ptr) & (alignment - 1)) == 0;
+ return is_aligned(reinterpret_cast<std::size_t>(ptr), alignment);
}
} /* .alignment */
diff --git a/boost/align/detail/max_align.hpp b/boost/align/detail/max_align.hpp
index daa0413..8ae6901 100644
--- a/boost/align/detail/max_align.hpp
+++ b/boost/align/detail/max_align.hpp
@@ -11,7 +11,6 @@ http://boost.org/LICENSE_1_0.txt
#include <boost/align/detail/max_size.hpp>
#include <boost/align/alignment_of.hpp>
-#include <cstddef>
namespace boost {
namespace alignment {
diff --git a/boost/align/is_aligned.hpp b/boost/align/is_aligned.hpp
index 5d99847..cbace96 100644
--- a/boost/align/is_aligned.hpp
+++ b/boost/align/is_aligned.hpp
@@ -10,5 +10,18 @@ http://boost.org/LICENSE_1_0.txt
#define BOOST_ALIGN_IS_ALIGNED_HPP
#include <boost/align/detail/is_aligned.hpp>
+#include <boost/align/is_aligned_forward.hpp>
+
+namespace boost {
+namespace alignment {
+
+BOOST_CONSTEXPR inline bool is_aligned(std::size_t value,
+ std::size_t alignment) BOOST_NOEXCEPT
+{
+ return (value & (alignment - 1)) == 0;
+}
+
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/is_aligned_forward.hpp b/boost/align/is_aligned_forward.hpp
new file mode 100644
index 0000000..d1bcbc1
--- /dev/null
+++ b/boost/align/is_aligned_forward.hpp
@@ -0,0 +1,24 @@
+/*
+(c) 2015 Glen Joseph Fernandes
+<glenjofe -at- gmail.com>
+
+Distributed under the Boost Software
+License, Version 1.0.
+http://boost.org/LICENSE_1_0.txt
+*/
+#ifndef BOOST_ALIGN_IS_ALIGNED_FORWARD_HPP
+#define BOOST_ALIGN_IS_ALIGNED_FORWARD_HPP
+
+#include <boost/config.hpp>
+#include <cstddef>
+
+namespace boost {
+namespace alignment {
+
+BOOST_CONSTEXPR bool is_aligned(std::size_t value,
+ std::size_t alignment) BOOST_NOEXCEPT;
+
+} /* .alignment */
+} /* .boost */
+
+#endif
diff --git a/boost/archive/add_facet.hpp b/boost/archive/add_facet.hpp
deleted file mode 100644
index 242bdd9..0000000
--- a/boost/archive/add_facet.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef BOOST_ARCHIVE_ADD_FACET_HPP
-#define BOOST_ARCHIVE_ADD_FACET_HPP
-
-// MS compatible compilers support #pragma once
-#if defined(_MSC_VER)
-# pragma once
-#endif
-
-/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
-// add_facet.hpp
-
-// (C) Copyright 2003 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 <locale>
-#include <boost/config.hpp>
-#include <boost/detail/workaround.hpp>
-
-// does STLport uses native STL for locales?
-#if (defined(__SGI_STL_PORT)&& defined(_STLP_NO_OWN_IOSTREAMS))
-// and this native STL lib is old Dinkumware (has not defined _CPPLIB_VER)
-# if (defined(_YVALS) && !defined(__IBMCPP__)) || !defined(_CPPLIB_VER)
-# define BOOST_ARCHIVE_OLD_DINKUMWARE_BENEATH_STLPORT
-# endif
-#endif
-
-namespace boost {
-namespace archive {
-
-template<class Facet>
-inline std::locale *
-add_facet(const std::locale &l, Facet * f){
- return
- #if defined BOOST_ARCHIVE_OLD_DINKUMWARE_BENEATH_STLPORT
- // std namespace used for native locale
- new std::locale(std::_Addfac(l, f));
- #elif BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) // old Dinkumwar
- // std namespace used for native locale
- new std::locale(std::_Addfac(l, f));
- #else
- // standard compatible
- new std::locale(l, f);
- #endif
-}
-
-} // namespace archive
-} // namespace boost
-
-#undef BOOST_ARCHIVE_OLD_DINKUMWARE_BENEATH_STLPORT
-
-#endif // BOOST_ARCHIVE_ADD_FACET_HPP
diff --git a/boost/archive/basic_binary_iprimitive.hpp b/boost/archive/basic_binary_iprimitive.hpp
index 5e82631..40f45d9 100644
--- a/boost/archive/basic_binary_iprimitive.hpp
+++ b/boost/archive/basic_binary_iprimitive.hpp
@@ -44,16 +44,16 @@ namespace std{
#endif
#include <boost/cstdint.hpp>
-#include <boost/scoped_ptr.hpp>
#include <boost/serialization/throw_exception.hpp>
#include <boost/integer.hpp>
#include <boost/integer_traits.hpp>
-#include <boost/mpl/placeholders.hpp>
+//#include <boost/mpl/placeholders.hpp>
#include <boost/serialization/is_bitwise_serializable.hpp>
#include <boost/serialization/array.hpp>
#include <boost/archive/basic_streambuf_locale_saver.hpp>
+#include <boost/archive/codecvt_null.hpp>
#include <boost/archive/archive_exception.hpp>
#include <boost/archive/detail/auto_link_archive.hpp>
#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
@@ -61,9 +61,6 @@ namespace std{
namespace boost {
namespace archive {
-template<class Ch>
-class codecvt_null;
-
/////////////////////////////////////////////////////////////////////////////
// class binary_iarchive - read serialized objects from a input binary stream
template<class Archive, class Elem, class Tr>
@@ -81,9 +78,16 @@ public:
}
#ifndef BOOST_NO_STD_LOCALE
- boost::scoped_ptr<codecvt_null<Elem> > codecvt_facet;
- boost::scoped_ptr<std::locale> archive_locale;
+ // note order! - if you change this, libstd++ will fail!
+ // a) create new locale with new codecvt facet
+ // b) save current locale
+ // c) change locale to new one
+ // d) use stream buffer
+ // e) change locale back to original
+ // f) destroy new codecvt facet
+ boost::archive::codecvt_null<Elem> codecvt_null_facet;
basic_streambuf_locale_saver<Elem, Tr> locale_saver;
+ std::locale archive_locale;
#endif
// main template for serilization of primitive types
@@ -139,7 +143,7 @@ public:
// the optimized load_array dispatches to load_binary
template <class ValueType>
- void load_array(serialization::array<ValueType>& a, unsigned int)
+ void load_array(serialization::array_wrapper<ValueType>& a, unsigned int)
{
load_binary(a.address(),a.count()*sizeof(ValueType));
}
diff --git a/boost/archive/basic_binary_oprimitive.hpp b/boost/archive/basic_binary_oprimitive.hpp
index f2ea6aa..4b7f454 100644
--- a/boost/archive/basic_binary_oprimitive.hpp
+++ b/boost/archive/basic_binary_oprimitive.hpp
@@ -43,20 +43,19 @@ namespace std{
#include <boost/scoped_ptr.hpp>
#include <boost/serialization/throw_exception.hpp>
-#include <boost/archive/basic_streambuf_locale_saver.hpp>
-#include <boost/archive/archive_exception.hpp>
+//#include <boost/mpl/placeholders.hpp>
#include <boost/serialization/is_bitwise_serializable.hpp>
-#include <boost/mpl/placeholders.hpp>
#include <boost/serialization/array.hpp>
+
+#include <boost/archive/basic_streambuf_locale_saver.hpp>
+#include <boost/archive/codecvt_null.hpp>
+#include <boost/archive/archive_exception.hpp>
#include <boost/archive/detail/auto_link_archive.hpp>
#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
namespace boost {
namespace archive {
-template<class Ch>
-class codecvt_null;
-
/////////////////////////////////////////////////////////////////////////
// class basic_binary_oprimitive - binary output of prmitives
@@ -74,9 +73,16 @@ public:
return static_cast<Archive *>(this);
}
#ifndef BOOST_NO_STD_LOCALE
- boost::scoped_ptr<codecvt_null<Elem> > codecvt_facet;
- boost::scoped_ptr<std::locale> archive_locale;
+ // note order! - if you change this, libstd++ will fail!
+ // a) create new locale with new codecvt facet
+ // b) save current locale
+ // c) change locale to new one
+ // d) use stream buffer
+ // e) change locale back to original
+ // f) destroy new codecvt facet
+ boost::archive::codecvt_null<Elem> codecvt_null_facet;
basic_streambuf_locale_saver<Elem, Tr> locale_saver;
+ std::locale archive_locale;
#endif
// default saving of primitives.
template<class T>
@@ -131,11 +137,10 @@ public:
struct apply : public boost::serialization::is_bitwise_serializable< T > {};
#endif
};
-
// the optimized save_array dispatches to save_binary
template <class ValueType>
- void save_array(boost::serialization::array<ValueType> const& a, unsigned int)
+ void save_array(boost::serialization::array_wrapper<ValueType> const& a, unsigned int)
{
save_binary(a.address(),a.count()*sizeof(ValueType));
}
diff --git a/boost/archive/basic_streambuf_locale_saver.hpp b/boost/archive/basic_streambuf_locale_saver.hpp
index 64c8e5d..5cd4b36 100644
--- a/boost/archive/basic_streambuf_locale_saver.hpp
+++ b/boost/archive/basic_streambuf_locale_saver.hpp
@@ -27,6 +27,7 @@
#ifndef BOOST_NO_STD_LOCALE
#include <locale> // for std::locale
+#include <ios>
#include <streambuf> // for std::basic_streambuf
#include <boost/config.hpp>
@@ -45,25 +46,57 @@ class basic_streambuf_locale_saver :
private boost::noncopyable
{
public:
- typedef ::std::basic_streambuf<Ch, Tr> state_type;
- typedef ::std::locale aspect_type;
- explicit basic_streambuf_locale_saver( state_type &s )
- : s_save_( s ), a_save_( s.getloc() )
- {}
- explicit basic_streambuf_locale_saver( state_type &s, aspect_type const &a )
- : s_save_( s ), a_save_( s.pubimbue(a) )
- {}
- ~basic_streambuf_locale_saver()
- { this->restore(); }
- void restore(){
- s_save_.pubsync();
- s_save_.pubimbue( a_save_ );
+ explicit basic_streambuf_locale_saver(std::basic_streambuf<Ch, Tr> &s) :
+ m_streambuf(s),
+ m_locale(s.getloc())
+ {}
+ ~basic_streambuf_locale_saver(){
+ m_streambuf.pubsync();
+ m_streambuf.pubimbue(m_locale);
}
private:
- state_type & s_save_;
- aspect_type const a_save_;
+ std::basic_streambuf<Ch, Tr> & m_streambuf;
+ std::locale const m_locale;
};
+template < typename Ch, class Tr >
+class basic_istream_locale_saver :
+ private boost::noncopyable
+{
+public:
+ explicit basic_istream_locale_saver(std::basic_istream<Ch, Tr> &s) :
+ m_istream(s),
+ m_locale(s.getloc())
+ {}
+ ~basic_istream_locale_saver(){
+ // libstdc++ crashes without this
+ m_istream.sync();
+ m_istream.imbue(m_locale);
+ }
+private:
+ std::basic_istream<Ch, Tr> & m_istream;
+ std::locale const m_locale;
+};
+
+template < typename Ch, class Tr >
+class basic_ostream_locale_saver :
+ private boost::noncopyable
+{
+public:
+ explicit basic_ostream_locale_saver(std::basic_ostream<Ch, Tr> &s) :
+ m_ostream(s),
+ m_locale(s.getloc())
+ {}
+ ~basic_ostream_locale_saver(){
+ m_ostream.flush();
+ m_ostream.imbue(m_locale);
+ }
+private:
+ std::basic_ostream<Ch, Tr> & m_ostream;
+ std::locale const m_locale;
+};
+
+
} // archive
} // boost
diff --git a/boost/archive/basic_text_iprimitive.hpp b/boost/archive/basic_text_iprimitive.hpp
index 08da95c..bf936b5 100644
--- a/boost/archive/basic_text_iprimitive.hpp
+++ b/boost/archive/basic_text_iprimitive.hpp
@@ -24,7 +24,6 @@
// in such cases. So we can't use basic_ostream<IStream::char_type> but rather
// use two template parameters
-#include <boost/assert.hpp>
#include <locale>
#include <cstddef> // size_t
@@ -38,17 +37,15 @@ namespace std{
} // namespace std
#endif
+#include <boost/io/ios_state.hpp>
+#include <boost/static_assert.hpp>
+
#include <boost/detail/workaround.hpp>
#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
#include <boost/archive/dinkumware.hpp>
#endif
-
-#include <boost/limits.hpp>
-#include <boost/io/ios_state.hpp>
-#include <boost/scoped_ptr.hpp>
-#include <boost/static_assert.hpp>
-
#include <boost/serialization/throw_exception.hpp>
+#include <boost/archive/codecvt_null.hpp>
#include <boost/archive/archive_exception.hpp>
#include <boost/archive/basic_streambuf_locale_saver.hpp>
#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
@@ -71,9 +68,17 @@ protected:
io::ios_precision_saver precision_saver;
#ifndef BOOST_NO_STD_LOCALE
- boost::scoped_ptr<std::locale> archive_locale;
- basic_streambuf_locale_saver<
- typename IStream::char_type,
+ // note order! - if you change this, libstd++ will fail!
+ // a) create new locale with new codecvt facet
+ // b) save current locale
+ // c) change locale to new one
+ // d) use stream buffer
+ // e) change locale back to original
+ // f) destroy new codecvt facet
+ boost::archive::codecvt_null<typename IStream::char_type> codecvt_null_facet;
+ std::locale archive_locale;
+ basic_istream_locale_saver<
+ typename IStream::char_type,
typename IStream::traits_type
> locale_saver;
#endif
diff --git a/boost/archive/basic_text_oprimitive.hpp b/boost/archive/basic_text_oprimitive.hpp
index 8633092..c9f8c59 100644
--- a/boost/archive/basic_text_oprimitive.hpp
+++ b/boost/archive/basic_text_oprimitive.hpp
@@ -26,14 +26,13 @@
#include <iomanip>
#include <locale>
-#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>
+#include <boost/detail/workaround.hpp>
#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
#include <boost/archive/dinkumware.hpp>
#endif
@@ -52,10 +51,10 @@ namespace std{
#include <boost/limits.hpp>
#include <boost/integer.hpp>
#include <boost/io/ios_state.hpp>
-#include <boost/scoped_ptr.hpp>
#include <boost/serialization/throw_exception.hpp>
-#include <boost/archive/archive_exception.hpp>
#include <boost/archive/basic_streambuf_locale_saver.hpp>
+#include <boost/archive/codecvt_null.hpp>
+#include <boost/archive/archive_exception.hpp>
#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
namespace boost {
@@ -72,9 +71,17 @@ protected:
io::ios_precision_saver precision_saver;
#ifndef BOOST_NO_STD_LOCALE
- boost::scoped_ptr<std::locale> archive_locale;
- basic_streambuf_locale_saver<
- typename OStream::char_type,
+ // note order! - if you change this, libstd++ will fail!
+ // a) create new locale with new codecvt facet
+ // b) save current locale
+ // c) change locale to new one
+ // d) use stream buffer
+ // e) change locale back to original
+ // f) destroy new codecvt facet
+ boost::archive::codecvt_null<typename OStream::char_type> codecvt_null_facet;
+ std::locale archive_locale;
+ basic_ostream_locale_saver<
+ typename OStream::char_type,
typename OStream::traits_type
> locale_saver;
#endif
diff --git a/boost/archive/basic_xml_iarchive.hpp b/boost/archive/basic_xml_iarchive.hpp
index 7834d8a..a882df5 100644
--- a/boost/archive/basic_xml_iarchive.hpp
+++ b/boost/archive/basic_xml_iarchive.hpp
@@ -17,15 +17,12 @@
// See http://www.boost.org for updates, documentation, and revision history.
#include <boost/config.hpp>
-#include <boost/detail/workaround.hpp>
+#include <boost/mpl/assert.hpp>
#include <boost/archive/detail/common_iarchive.hpp>
-
#include <boost/serialization/nvp.hpp>
#include <boost/serialization/string.hpp>
-#include <boost/mpl/assert.hpp>
-
#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
#ifdef BOOST_MSVC
@@ -41,24 +38,18 @@ namespace detail {
} // namespace detail
/////////////////////////////////////////////////////////////////////////
-// class xml_iarchive - read serialized objects from a input text stream
+// class basic_xml_iarchive - read serialized objects from a input text stream
template<class Archive>
class BOOST_SYMBOL_VISIBLE basic_xml_iarchive :
public detail::common_iarchive<Archive>
{
+ unsigned int depth;
#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
public:
#else
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
+ friend class detail::interface_iarchive<Archive>;
#endif
- unsigned int depth;
BOOST_ARCHIVE_OR_WARCHIVE_DECL void
load_start(const char *name);
BOOST_ARCHIVE_OR_WARCHIVE_DECL void
@@ -96,14 +87,15 @@ protected:
// an xml archive. So we can skip it here. Note: we MUST override
// it otherwise it will be loaded as a normal primitive w/o tag and
// leaving the archive in an undetermined state
- void load_override(class_id_optional_type & /* t */){}
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+ load_override(class_id_type & t);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+ load_override(class_id_optional_type & /* t */){}
BOOST_ARCHIVE_OR_WARCHIVE_DECL void
load_override(object_id_type & t);
BOOST_ARCHIVE_OR_WARCHIVE_DECL void
load_override(version_type & t);
BOOST_ARCHIVE_OR_WARCHIVE_DECL void
- load_override(class_id_type & t);
- BOOST_ARCHIVE_OR_WARCHIVE_DECL void
load_override(tracking_type & t);
// class_name_type can't be handled here as it depends upon the
// char type used by the stream. So require the derived implementation
diff --git a/boost/archive/basic_xml_oarchive.hpp b/boost/archive/basic_xml_oarchive.hpp
index 0325eee..107fca4 100644
--- a/boost/archive/basic_xml_oarchive.hpp
+++ b/boost/archive/basic_xml_oarchive.hpp
@@ -18,15 +18,11 @@
#include <boost/config.hpp>
#include <boost/mpl/assert.hpp>
-#include <boost/detail/workaround.hpp>
#include <boost/archive/detail/common_oarchive.hpp>
-
#include <boost/serialization/nvp.hpp>
-#include <boost/serialization/tracking.hpp>
#include <boost/serialization/string.hpp>
-
#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
#ifdef BOOST_MSVC
@@ -47,28 +43,23 @@ template<class Archive>
class BOOST_SYMBOL_VISIBLE basic_xml_oarchive :
public detail::common_oarchive<Archive>
{
+ // special stuff for xml output
+ unsigned int depth;
+ bool pending_preamble;
#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
public:
#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>;
-#else
friend class detail::interface_oarchive<Archive>;
#endif
- friend class save_access;
- // special stuff for xml output
- unsigned int depth;
bool indent_next;
- bool pending_preamble;
BOOST_ARCHIVE_OR_WARCHIVE_DECL void
indent();
BOOST_ARCHIVE_OR_WARCHIVE_DECL void
init();
BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+ windup();
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL void
write_attribute(
const char *attribute_name,
int t,
@@ -113,18 +104,18 @@ protected:
// specific overrides for attributes - not name value pairs so we
// want to trap them before the above "fall through"
BOOST_ARCHIVE_OR_WARCHIVE_DECL void
- save_override(const object_id_type & t);
- BOOST_ARCHIVE_OR_WARCHIVE_DECL void
- save_override(const object_reference_type & t);
- BOOST_ARCHIVE_OR_WARCHIVE_DECL void
- save_override(const version_type & t);
- BOOST_ARCHIVE_OR_WARCHIVE_DECL void
save_override(const class_id_type & t);
BOOST_ARCHIVE_OR_WARCHIVE_DECL void
save_override(const class_id_optional_type & t);
BOOST_ARCHIVE_OR_WARCHIVE_DECL void
save_override(const class_id_reference_type & t);
BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+ save_override(const object_id_type & t);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+ save_override(const object_reference_type & t);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+ save_override(const version_type & t);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL void
save_override(const class_name_type & t);
BOOST_ARCHIVE_OR_WARCHIVE_DECL void
save_override(const tracking_type & t);
diff --git a/boost/archive/binary_iarchive_impl.hpp b/boost/archive/binary_iarchive_impl.hpp
index 3ff994a..b4747c9 100644
--- a/boost/archive/binary_iarchive_impl.hpp
+++ b/boost/archive/binary_iarchive_impl.hpp
@@ -33,7 +33,7 @@ namespace detail {
} // namespace detail
template<class Archive, class Elem, class Tr>
-class binary_iarchive_impl :
+class BOOST_SYMBOL_VISIBLE binary_iarchive_impl :
public basic_binary_iprimitive<Archive, Elem, Tr>,
public basic_binary_iarchive<Archive>
{
@@ -58,8 +58,9 @@ protected:
this->basic_binary_iarchive<Archive>::load_override(t);
}
void init(unsigned int flags){
- if(0 != (flags & no_header))
+ if(0 != (flags & no_header)){
return;
+ }
#if ! defined(__MWERKS__)
this->basic_binary_iarchive<Archive>::init();
this->basic_binary_iprimitive<Archive, Elem, Tr>::init();
diff --git a/boost/archive/binary_oarchive_impl.hpp b/boost/archive/binary_oarchive_impl.hpp
index 76e3a65..6b4d018 100644
--- a/boost/archive/binary_oarchive_impl.hpp
+++ b/boost/archive/binary_oarchive_impl.hpp
@@ -34,7 +34,7 @@ namespace detail {
} // namespace detail
template<class Archive, class Elem, class Tr>
-class binary_oarchive_impl :
+class BOOST_SYMBOL_VISIBLE binary_oarchive_impl :
public basic_binary_oprimitive<Archive, Elem, Tr>,
public basic_binary_oarchive<Archive>
{
@@ -59,8 +59,9 @@ protected:
this->basic_binary_oarchive<Archive>::save_override(t);
}
void init(unsigned int flags) {
- if(0 != (flags & no_header))
+ if(0 != (flags & no_header)){
return;
+ }
#if ! defined(__MWERKS__)
this->basic_binary_oarchive<Archive>::init();
this->basic_binary_oprimitive<Archive, Elem, Tr>::init();
diff --git a/boost/archive/codecvt_null.hpp b/boost/archive/codecvt_null.hpp
index 324122b..9cc9e57 100644
--- a/boost/archive/codecvt_null.hpp
+++ b/boost/archive/codecvt_null.hpp
@@ -56,10 +56,11 @@ public:
explicit codecvt_null(std::size_t no_locale_manage = 0) :
std::codecvt<char, char, std::mbstate_t>(no_locale_manage)
{}
+ virtual ~codecvt_null(){};
};
template<>
-class codecvt_null<wchar_t> : public std::codecvt<wchar_t, char, std::mbstate_t>
+class BOOST_SYMBOL_VISIBLE codecvt_null<wchar_t> : public std::codecvt<wchar_t, char, std::mbstate_t>
{
virtual BOOST_WARCHIVE_DECL std::codecvt_base::result
do_out(
@@ -91,6 +92,7 @@ public:
explicit codecvt_null(std::size_t no_locale_manage = 0) :
std::codecvt<wchar_t, char, std::mbstate_t>(no_locale_manage)
{}
+ virtual ~codecvt_null(){};
};
} // namespace archive
diff --git a/boost/archive/detail/basic_serializer.hpp b/boost/archive/detail/basic_serializer.hpp
index c7d3b4b..f9c4203 100644
--- a/boost/archive/detail/basic_serializer.hpp
+++ b/boost/archive/detail/basic_serializer.hpp
@@ -41,9 +41,7 @@ protected:
const boost::serialization::extended_type_info & eti
) :
m_eti(& eti)
- {
- BOOST_ASSERT(NULL != & eti);
- }
+ {}
public:
inline bool
operator<(const basic_serializer & rhs) const {
diff --git a/boost/archive/detail/common_iarchive.hpp b/boost/archive/detail/common_iarchive.hpp
index b4c44d2..82304f1 100644
--- a/boost/archive/detail/common_iarchive.hpp
+++ b/boost/archive/detail/common_iarchive.hpp
@@ -35,7 +35,7 @@ class extended_type_info;
// note: referred to as Curiously Recurring Template Patter (CRTP)
template<class Archive>
-class common_iarchive :
+class BOOST_SYMBOL_VISIBLE common_iarchive :
public basic_iarchive,
public interface_iarchive<Archive>
{
diff --git a/boost/archive/detail/common_oarchive.hpp b/boost/archive/detail/common_oarchive.hpp
index 13c71bc..ee42bbe 100644
--- a/boost/archive/detail/common_oarchive.hpp
+++ b/boost/archive/detail/common_oarchive.hpp
@@ -32,7 +32,8 @@ namespace detail {
// note: referred to as Curiously Recurring Template Patter (CRTP)
template<class Archive>
-class common_oarchive :
+
+class BOOST_SYMBOL_VISIBLE common_oarchive :
public basic_oarchive,
public interface_oarchive<Archive>
{
diff --git a/boost/archive/detail/decl.hpp b/boost/archive/detail/decl.hpp
index bb386d8..4f731cd 100644
--- a/boost/archive/detail/decl.hpp
+++ b/boost/archive/detail/decl.hpp
@@ -29,14 +29,12 @@
#else
#define BOOST_ARCHIVE_DECL BOOST_SYMBOL_IMPORT
#endif
+
#if defined(BOOST_WARCHIVE_SOURCE)
#define BOOST_WARCHIVE_DECL BOOST_SYMBOL_EXPORT
#else
#define BOOST_WARCHIVE_DECL BOOST_SYMBOL_IMPORT
#endif
- #if !defined(BOOST_WARCHIVE_SOURCE) && !defined(BOOST_ARCHIVE_SOURCE)
- #define BOOST_ARCHIVE_OR_WARCHIVE_DECL BOOST_SYMBOL_IMPORT
- #endif
#if defined(BOOST_WARCHIVE_SOURCE) || defined(BOOST_ARCHIVE_SOURCE)
#define BOOST_ARCHIVE_OR_WARCHIVE_DECL BOOST_SYMBOL_EXPORT
diff --git a/boost/archive/detail/iserializer.hpp b/boost/archive/detail/iserializer.hpp
index 6419e62..6bec499 100644
--- a/boost/archive/detail/iserializer.hpp
+++ b/boost/archive/detail/iserializer.hpp
@@ -39,7 +39,6 @@ namespace std{
#include <boost/mpl/identity.hpp>
#include <boost/mpl/greater_equal.hpp>
#include <boost/mpl/equal_to.hpp>
-#include <boost/mpl/bool.hpp>
#include <boost/core/no_exceptions_support.hpp>
#ifndef BOOST_SERIALIZATION_DEFAULT_TYPE_INFO
@@ -226,15 +225,6 @@ struct heap_allocation {
static T * invoke_new() {
return static_cast<T *>((T::operator new)(sizeof(T)));
}
- template<void D(void *, std::size_t)>
- static void deleter(void * t, std::size_t s){
- D(t, s);
- }
-
- template<void D(void *)>
- static void deleter(void * t, std::size_t s){
- D(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
@@ -244,7 +234,7 @@ struct heap_allocation {
// that the class might have class specific new with NO
// class specific delete at all. Patches (compatible with
// C++03) welcome!
- deleter<T::operator delete>(t, sizeof(T));
+ delete t;
}
};
struct doesnt_have_new_operator {
@@ -253,7 +243,7 @@ struct heap_allocation {
}
static void invoke_delete(T * t) {
// Note: I'm reliance upon automatic conversion from T * to void * here
- (operator delete)(t);
+ delete t;
}
};
static T * invoke_new() {
diff --git a/boost/archive/detail/oserializer.hpp b/boost/archive/detail/oserializer.hpp
index 7a7e239..0f2e733 100644
--- a/boost/archive/detail/oserializer.hpp
+++ b/boost/archive/detail/oserializer.hpp
@@ -33,6 +33,7 @@
#include <boost/mpl/equal_to.hpp>
#include <boost/mpl/greater_equal.hpp>
#include <boost/mpl/identity.hpp>
+#include <boost/mpl/bool_fwd.hpp>
#ifndef BOOST_SERIALIZATION_DEFAULT_TYPE_INFO
#include <boost/serialization/extended_type_info_typeid.hpp>
diff --git a/boost/archive/detail/utf8_codecvt_facet.hpp b/boost/archive/detail/utf8_codecvt_facet.hpp
index b2430d5..dfbec6b 100644
--- a/boost/archive/detail/utf8_codecvt_facet.hpp
+++ b/boost/archive/detail/utf8_codecvt_facet.hpp
@@ -7,10 +7,17 @@
#ifndef BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP
#define BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP
-#ifdef BOOST_NO_CXX11_HDR_CODECVT
+#include <boost/config.hpp>
+
+// std::codecvt_utf8 doesn't seem to work for msvc
+// versions prior to MSVC 14.0
+
+#if defined(_MSC_VER) && _MSC_VER < 1900 \
+|| defined( BOOST_NO_CXX11_HDR_CODECVT )
+ #include <boost/archive/detail/decl.hpp>
#define BOOST_UTF8_BEGIN_NAMESPACE \
namespace boost { namespace archive { namespace detail {
- #define BOOST_UTF8_DECL
+ #define BOOST_UTF8_DECL BOOST_ARCHIVE_DECL
#define BOOST_UTF8_END_NAMESPACE }}}
#include <boost/detail/utf8_codecvt_facet.hpp>
@@ -18,6 +25,10 @@
#undef BOOST_UTF8_END_NAMESPACE
#undef BOOST_UTF8_DECL
#undef BOOST_UTF8_BEGIN_NAMESPACE
+#else
+ #include <codecvt>
+ namespace boost { namespace archive { namespace detail {
+ typedef std::codecvt_utf8<wchar_t> utf8_codecvt_facet;
+ } } }
#endif // BOOST_NO_CXX11_HDR_CODECVT
#endif // BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP
-
diff --git a/boost/archive/impl/basic_binary_iprimitive.ipp b/boost/archive/impl/basic_binary_iprimitive.ipp
index bee7baf..7082b00 100644
--- a/boost/archive/impl/basic_binary_iprimitive.ipp
+++ b/boost/archive/impl/basic_binary_iprimitive.ipp
@@ -20,14 +20,9 @@ namespace std{
} // namespace std
#endif
-#include <boost/detail/workaround.hpp> // fixup for RogueWave
-
#include <boost/serialization/throw_exception.hpp>
-
#include <boost/core/no_exceptions_support.hpp>
#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 {
@@ -152,16 +147,13 @@ basic_binary_iprimitive<Archive, Elem, Tr>::basic_binary_iprimitive(
) :
#ifndef BOOST_NO_STD_LOCALE
m_sb(sb),
- locale_saver(m_sb)
+ codecvt_null_facet(1),
+ locale_saver(m_sb),
+ archive_locale(sb.getloc(), & codecvt_null_facet)
{
if(! no_codecvt){
- archive_locale.reset(
- add_facet(
- std::locale::classic(),
- new codecvt_null<Elem>
- )
- );
- //m_sb.pubimbue(* archive_locale);
+ m_sb.pubsync();
+ m_sb.pubimbue(archive_locale);
}
}
#else
@@ -169,42 +161,11 @@ basic_binary_iprimitive<Archive, Elem, Tr>::basic_binary_iprimitive(
{}
#endif
-// some libraries including stl and libcomo fail if the
-// buffer isn't flushed before the code_cvt facet is changed.
-// I think this is a bug. We explicity invoke sync to when
-// we're done with the streambuf to work around this problem.
-// Note that sync is a protected member of stream buff so we
-// have to invoke it through a contrived derived class.
-namespace detail {
-// note: use "using" to get past msvc bug
-using namespace std;
-template<class Elem, class Tr>
-class input_streambuf_access : public std::basic_streambuf<Elem, Tr> {
- public:
- virtual int sync(){
-#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206))
- return this->basic_streambuf::sync();
-#else
- return this->basic_streambuf<Elem, Tr>::sync();
-#endif
- }
-};
-} // detail
-
-// scoped_ptr requires that archive_locale be a complete type at time of
+// scoped_ptr requires that g be a complete type at time of
// destruction so define destructor here rather than in the header
template<class Archive, class Elem, class Tr>
BOOST_ARCHIVE_OR_WARCHIVE_DECL
-basic_binary_iprimitive<Archive, Elem, Tr>::~basic_binary_iprimitive(){
- // push back unread characters
- //destructor can't throw !
- BOOST_TRY{
- static_cast<detail::input_streambuf_access<Elem, Tr> &>(m_sb).sync();
- }
- BOOST_CATCH(...){
- }
- BOOST_CATCH_END
-}
+basic_binary_iprimitive<Archive, Elem, Tr>::~basic_binary_iprimitive(){}
} // namespace archive
} // namespace boost
diff --git a/boost/archive/impl/basic_binary_oprimitive.ipp b/boost/archive/impl/basic_binary_oprimitive.ipp
index 88cc124..130831e 100644
--- a/boost/archive/impl/basic_binary_oprimitive.ipp
+++ b/boost/archive/impl/basic_binary_oprimitive.ipp
@@ -27,10 +27,6 @@ namespace std{ using ::wcslen; }
#endif
#endif
-#include <boost/detail/workaround.hpp>
-
-#include <boost/archive/add_facet.hpp>
-#include <boost/archive/codecvt_null.hpp>
#include <boost/archive/basic_binary_oprimitive.hpp>
#include <boost/core/no_exceptions_support.hpp>
@@ -104,16 +100,13 @@ basic_binary_oprimitive<Archive, Elem, Tr>::basic_binary_oprimitive(
) :
#ifndef BOOST_NO_STD_LOCALE
m_sb(sb),
- locale_saver(m_sb)
+ codecvt_null_facet(1),
+ locale_saver(m_sb),
+ archive_locale(sb.getloc(), & codecvt_null_facet)
{
if(! no_codecvt){
- archive_locale.reset(
- add_facet(
- std::locale::classic(),
- new codecvt_null<Elem>
- )
- );
- //m_sb.pubimbue(* archive_locale);
+ m_sb.pubsync();
+ m_sb.pubimbue(archive_locale);
}
}
#else
@@ -121,42 +114,11 @@ basic_binary_oprimitive<Archive, Elem, Tr>::basic_binary_oprimitive(
{}
#endif
-// some libraries including stl and libcomo fail if the
-// buffer isn't flushed before the code_cvt facet is changed.
-// I think this is a bug. We explicity invoke sync to when
-// we're done with the streambuf to work around this problem.
-// Note that sync is a protected member of stream buff so we
-// have to invoke it through a contrived derived class.
-namespace detail {
-// note: use "using" to get past msvc bug
-using namespace std;
-template<class Elem, class Tr>
-class output_streambuf_access : public std::basic_streambuf<Elem, Tr> {
- public:
- virtual int sync(){
-#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206))
- return this->basic_streambuf::sync();
-#else
- return this->basic_streambuf<Elem, Tr>::sync();
-#endif
- }
-};
-} // detail
-
// scoped_ptr requires that g be a complete type at time of
// destruction so define destructor here rather than in the header
template<class Archive, class Elem, class Tr>
BOOST_ARCHIVE_OR_WARCHIVE_DECL
-basic_binary_oprimitive<Archive, Elem, Tr>::~basic_binary_oprimitive(){
- // flush buffer
- //destructor can't throw
- BOOST_TRY{
- static_cast<detail::output_streambuf_access<Elem, Tr> &>(m_sb).sync();
- }
- BOOST_CATCH(...){
- }
- BOOST_CATCH_END
-}
+basic_binary_oprimitive<Archive, Elem, Tr>::~basic_binary_oprimitive(){}
} // namespace archive
} // namespace boost
diff --git a/boost/archive/impl/basic_text_iprimitive.ipp b/boost/archive/impl/basic_text_iprimitive.ipp
index e245dc5..4e44728 100644
--- a/boost/archive/impl/basic_text_iprimitive.ipp
+++ b/boost/archive/impl/basic_text_iprimitive.ipp
@@ -8,8 +8,8 @@
// See http://www.boost.org for updates, documentation, and revision history.
-#include <cstddef> // size_t
-#include <cstddef> // NULL
+#include <cstddef> // size_t, NULL
+#include <limits> // NULL
#include <boost/config.hpp>
#if defined(BOOST_NO_STDC_NAMESPACE)
@@ -21,8 +21,6 @@ namespace std{
#include <boost/serialization/throw_exception.hpp>
#include <boost/archive/basic_text_iprimitive.hpp>
-#include <boost/archive/codecvt_null.hpp>
-#include <boost/archive/add_facet.hpp>
#include <boost/archive/iterators/remove_whitespace.hpp>
#include <boost/archive/iterators/istream_iterator.hpp>
@@ -78,7 +76,7 @@ basic_text_iprimitive<IStream>::load_binary(
iterators::remove_whitespace<
iterators::istream_iterator<CharType>
>
- ,CharType
+ ,typename IStream::int_type
>
,8
,6
@@ -112,34 +110,27 @@ basic_text_iprimitive<IStream>::basic_text_iprimitive(
IStream &is_,
bool no_codecvt
) :
-#ifndef BOOST_NO_STD_LOCALE
is(is_),
flags_saver(is_),
precision_saver(is_),
- locale_saver(* is_.rdbuf())
+#ifndef BOOST_NO_STD_LOCALE
+ codecvt_null_facet(1),
+ archive_locale(is.getloc(), & codecvt_null_facet),
+ locale_saver(is)
{
if(! no_codecvt){
- archive_locale.reset(
- add_facet(
- std::locale::classic(),
- new boost::archive::codecvt_null<typename IStream::char_type>
- )
- );
- //is.imbue(* archive_locale);
+ is_.sync();
+ is_.imbue(archive_locale);
}
- is >> std::noboolalpha;
+ is_ >> std::noboolalpha;
}
#else
- is(is_),
- flags_saver(is_),
- precision_saver(is_)
{}
#endif
template<class IStream>
BOOST_ARCHIVE_OR_WARCHIVE_DECL
basic_text_iprimitive<IStream>::~basic_text_iprimitive(){
- is.sync();
}
} // namespace archive
diff --git a/boost/archive/impl/basic_text_oprimitive.ipp b/boost/archive/impl/basic_text_oprimitive.ipp
index f2b0a10..6030fd4 100644
--- a/boost/archive/impl/basic_text_oprimitive.ipp
+++ b/boost/archive/impl/basic_text_oprimitive.ipp
@@ -10,10 +10,15 @@
#include <cstddef> // NULL
#include <algorithm> // std::copy
+#include <exception> // std::uncaught_exception
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
#include <boost/archive/basic_text_oprimitive.hpp>
-#include <boost/archive/codecvt_null.hpp>
-#include <boost/archive/add_facet.hpp>
#include <boost/archive/iterators/base64_from_binary.hpp>
#include <boost/archive/iterators/insert_linebreaks.hpp>
@@ -79,33 +84,30 @@ basic_text_oprimitive<OStream>::basic_text_oprimitive(
OStream & os_,
bool no_codecvt
) :
-#ifndef BOOST_NO_STD_LOCALE
os(os_),
flags_saver(os_),
precision_saver(os_),
- locale_saver(* os_.rdbuf())
+#ifndef BOOST_NO_STD_LOCALE
+ codecvt_null_facet(1),
+ archive_locale(os.getloc(), & codecvt_null_facet),
+ locale_saver(os)
{
if(! no_codecvt){
- archive_locale.reset(
- add_facet(
- std::locale::classic(),
- new boost::archive::codecvt_null<typename OStream::char_type>
- )
- );
- //os.imbue(* archive_locale);
+ os_.flush();
+ os_.imbue(archive_locale);
}
- os << std::noboolalpha;
+ os_ << std::noboolalpha;
}
#else
- os(os_),
- flags_saver(os_),
- precision_saver(os_)
{}
#endif
+
template<class OStream>
BOOST_ARCHIVE_OR_WARCHIVE_DECL
basic_text_oprimitive<OStream>::~basic_text_oprimitive(){
+ if(std::uncaught_exception())
+ return;
os << std::endl;
}
diff --git a/boost/archive/impl/basic_xml_grammar.hpp b/boost/archive/impl/basic_xml_grammar.hpp
index 70a6013..6d4e468 100644
--- a/boost/archive/impl/basic_xml_grammar.hpp
+++ b/boost/archive/impl/basic_xml_grammar.hpp
@@ -163,7 +163,7 @@ public:
bool parse_end_tag(IStream & is) const;
bool parse_string(IStream & is, StringType & s) /*const*/;
void init(IStream & is);
- void windup(IStream & is);
+ bool windup(IStream & is);
basic_xml_grammar();
};
diff --git a/boost/archive/impl/basic_xml_iarchive.ipp b/boost/archive/impl/basic_xml_iarchive.ipp
index 9e67012..625458b 100644
--- a/boost/archive/impl/basic_xml_iarchive.ipp
+++ b/boost/archive/impl/basic_xml_iarchive.ipp
@@ -108,7 +108,8 @@ basic_xml_iarchive<Archive>::basic_xml_iarchive(unsigned int flags) :
{}
template<class Archive>
BOOST_ARCHIVE_OR_WARCHIVE_DECL
-basic_xml_iarchive<Archive>::~basic_xml_iarchive(){}
+basic_xml_iarchive<Archive>::~basic_xml_iarchive(){
+}
} // namespace archive
} // namespace boost
diff --git a/boost/archive/impl/basic_xml_oarchive.ipp b/boost/archive/impl/basic_xml_oarchive.ipp
index 5db1e13..3184413 100644
--- a/boost/archive/impl/basic_xml_oarchive.ipp
+++ b/boost/archive/impl/basic_xml_oarchive.ipp
@@ -247,25 +247,25 @@ basic_xml_oarchive<Archive>::init(){
}
template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_oarchive<Archive>::windup(){
+ // xml_trailer
+ this->This()->put("</boost_serialization>\n");
+}
+
+template<class Archive>
BOOST_ARCHIVE_OR_WARCHIVE_DECL
basic_xml_oarchive<Archive>::basic_xml_oarchive(unsigned int flags) :
detail::common_oarchive<Archive>(flags),
depth(0),
- indent_next(false),
- pending_preamble(false)
+ pending_preamble(false),
+ indent_next(false)
{
}
template<class Archive>
BOOST_ARCHIVE_OR_WARCHIVE_DECL
basic_xml_oarchive<Archive>::~basic_xml_oarchive(){
- if(0 == (this->get_flags() & no_header)){
- BOOST_TRY{
- this->This()->put("</boost_serialization>\n");
- }
- BOOST_CATCH(...){}
- BOOST_CATCH_END
- }
}
} // namespace archive
diff --git a/boost/archive/impl/text_oarchive_impl.ipp b/boost/archive/impl/text_oarchive_impl.ipp
index 4ff488f..37d8664 100644
--- a/boost/archive/impl/text_oarchive_impl.ipp
+++ b/boost/archive/impl/text_oarchive_impl.ipp
@@ -10,7 +10,6 @@
#include <string>
#include <boost/config.hpp>
-#include <locale>
#include <cstddef> // size_t
#include <boost/config.hpp>
@@ -27,7 +26,6 @@ namespace std{ using ::wcslen; }
#endif
#endif
-#include <boost/archive/add_facet.hpp>
#include <boost/archive/text_oarchive.hpp>
namespace boost {
diff --git a/boost/archive/impl/xml_iarchive_impl.ipp b/boost/archive/impl/xml_iarchive_impl.ipp
index bf94774..efc32e0 100644
--- a/boost/archive/impl/xml_iarchive_impl.ipp
+++ b/boost/archive/impl/xml_iarchive_impl.ipp
@@ -11,6 +11,8 @@
#include <boost/config.hpp>
#include <cstring> // memcpy
#include <cstddef> // NULL
+#include <exception>
+
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
using ::memcpy;
@@ -64,22 +66,22 @@ xml_iarchive_impl<Archive>::load(std::wstring &ws){
#if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101))
if(NULL != ws.data())
#endif
- ws.resize(0);
- std::mbstate_t mbs;
+ ws.resize(0);
+ std::mbstate_t mbs = std::mbstate_t();
const char * start = s.data();
const char * end = start + s.size();
while(start < end){
wchar_t wc;
- std::size_t result = std::mbrtowc(&wc, start, end - start, &mbs);
- if(result == static_cast<std::size_t>(-1))
+ std::size_t count = std::mbrtowc(&wc, start, end - start, &mbs);
+ if(count == static_cast<std::size_t>(-1))
boost::serialization::throw_exception(
iterators::dataflow_exception(
iterators::dataflow_exception::invalid_conversion
)
);
- if(result == static_cast<std::size_t>(-2))
+ if(count == static_cast<std::size_t>(-2))
continue;
- start += result;
+ start += count;
ws += wc;
}
}
@@ -98,7 +100,7 @@ xml_iarchive_impl<Archive>::load(wchar_t * ws){
)
);
- std::mbstate_t mbs;
+ std::mbstate_t mbs = std::mbstate_t();
const char * start = s.data();
const char * end = start + s.size();
while(start < end){
@@ -187,12 +189,10 @@ xml_iarchive_impl<Archive>::xml_iarchive_impl(
template<class Archive>
BOOST_ARCHIVE_DECL
xml_iarchive_impl<Archive>::~xml_iarchive_impl(){
+ if(std::uncaught_exception())
+ return;
if(0 == (this->get_flags() & no_header)){
- BOOST_TRY{
- gimpl->windup(is);
- }
- BOOST_CATCH(...){}
- BOOST_CATCH_END
+ gimpl->windup(is);
}
}
} // namespace archive
diff --git a/boost/archive/impl/xml_oarchive_impl.ipp b/boost/archive/impl/xml_oarchive_impl.ipp
index 9e714f3..5ebd454 100644
--- a/boost/archive/impl/xml_oarchive_impl.ipp
+++ b/boost/archive/impl/xml_oarchive_impl.ipp
@@ -10,6 +10,7 @@
#include <iomanip>
#include <algorithm> // std::copy
#include <string>
+#include <exception>
#include <cstring> // strlen
#include <boost/config.hpp> // msvc 6.0 needs this to suppress warnings
@@ -113,5 +114,29 @@ xml_oarchive_impl<Archive>::xml_oarchive_impl(
this->init();
}
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+xml_oarchive_impl<Archive>::save_binary(const void *address, std::size_t count){
+ this->end_preamble();
+ #if ! defined(__MWERKS__)
+ this->basic_text_oprimitive<std::ostream>::save_binary(
+ #else
+ this->basic_text_oprimitive::save_binary(
+ #endif
+ address,
+ count
+ );
+ this->indent_next = true;
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL
+xml_oarchive_impl<Archive>::~xml_oarchive_impl(){
+ if(std::uncaught_exception())
+ return;
+ if(0 == (this->get_flags() & no_header))
+ this->windup();
+}
+
} // namespace archive
} // namespace boost
diff --git a/boost/archive/impl/xml_wiarchive_impl.ipp b/boost/archive/impl/xml_wiarchive_impl.ipp
index a837347..ee66c12 100644
--- a/boost/archive/impl/xml_wiarchive_impl.ipp
+++ b/boost/archive/impl/xml_wiarchive_impl.ipp
@@ -20,7 +20,7 @@ namespace std{
#include <boost/assert.hpp>
#include <algorithm> // std::copy
-
+#include <exception> // uncaught exception
#include <boost/detail/workaround.hpp> // Dinkumware and RogueWave
#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
#include <boost/archive/dinkumware.hpp>
@@ -33,11 +33,11 @@ namespace std{
#include <boost/archive/basic_xml_archive.hpp>
#include <boost/archive/xml_wiarchive.hpp>
-#include <boost/archive/add_facet.hpp>
-
#include <boost/archive/xml_archive_exception.hpp>
#include <boost/archive/iterators/mb_from_wchar.hpp>
+#include <boost/archive/detail/utf8_codecvt_facet.hpp>
+
#include "basic_xml_grammar.hpp"
namespace boost {
@@ -161,15 +161,13 @@ xml_wiarchive_impl<Archive>::xml_wiarchive_impl(
gimpl(new xml_wgrammar())
{
if(0 == (flags & no_codecvt)){
- // note usage of argument "1" so that the locale isn't
- // automatically delete the facet
- archive_locale.reset(
- add_facet(
- is_.getloc(),
- new boost::archive::detail::utf8_codecvt_facet
- )
+ std::locale l = std::locale(
+ is_.getloc(),
+ new boost::archive::detail::utf8_codecvt_facet
);
- //is.imbue(* archive_locale);
+ // libstdc++ crashes without this
+ is_.sync();
+ is_.imbue(l);
}
if(0 == (flags & no_header))
init();
@@ -178,12 +176,10 @@ xml_wiarchive_impl<Archive>::xml_wiarchive_impl(
template<class Archive>
BOOST_WARCHIVE_DECL
xml_wiarchive_impl<Archive>::~xml_wiarchive_impl(){
+ if(std::uncaught_exception())
+ return;
if(0 == (this->get_flags() & no_header)){
- BOOST_TRY{
- gimpl->windup(is);
- }
- BOOST_CATCH(...){}
- BOOST_CATCH_END
+ gimpl->windup(is);
}
}
diff --git a/boost/archive/impl/xml_woarchive_impl.ipp b/boost/archive/impl/xml_woarchive_impl.ipp
index d5586d5..58f92c9 100644
--- a/boost/archive/impl/xml_woarchive_impl.ipp
+++ b/boost/archive/impl/xml_woarchive_impl.ipp
@@ -13,6 +13,7 @@
#include <string>
#include <algorithm> // std::copy
#include <locale>
+#include <exception>
#include <cstring> // strlen
#include <cstdlib> // mbtowc
@@ -30,6 +31,8 @@ namespace std{
#endif
#include <boost/archive/xml_woarchive.hpp>
+#include <boost/archive/detail/utf8_codecvt_facet.hpp>
+
#include <boost/serialization/throw_exception.hpp>
#include <boost/archive/iterators/xml_escape.hpp>
@@ -37,8 +40,6 @@ namespace std{
#include <boost/archive/iterators/ostream_iterator.hpp>
#include <boost/archive/iterators/dataflow_exception.hpp>
-#include <boost/archive/add_facet.hpp>
-
namespace boost {
namespace archive {
@@ -122,19 +123,13 @@ xml_woarchive_impl<Archive>::xml_woarchive_impl(
),
basic_xml_oarchive<Archive>(flags)
{
- // Standard behavior is that imbue can be called
- // 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.
if(0 == (flags & no_codecvt)){
- archive_locale.reset(
- add_facet(
- os_.getloc(),
- new boost::archive::detail::utf8_codecvt_facet
- )
+ std::locale l = std::locale(
+ os_.getloc(),
+ new boost::archive::detail::utf8_codecvt_facet
);
- //os.imbue(* archive_locale);
+ os_.flush();
+ os_.imbue(l);
}
if(0 == (flags & no_header))
this->init();
@@ -143,6 +138,29 @@ xml_woarchive_impl<Archive>::xml_woarchive_impl(
template<class Archive>
BOOST_WARCHIVE_DECL
xml_woarchive_impl<Archive>::~xml_woarchive_impl(){
+ if(std::uncaught_exception())
+ return;
+ if(0 == (this->get_flags() & no_header)){
+ save(L"</boost_serialization>\n");
+ }
+}
+
+template<class Archive>
+BOOST_WARCHIVE_DECL void
+xml_woarchive_impl<Archive>::save_binary(
+ const void *address,
+ std::size_t count
+){
+ this->end_preamble();
+ #if ! defined(__MWERKS__)
+ this->basic_text_oprimitive<std::wostream>::save_binary(
+ #else
+ this->basic_text_oprimitive::save_binary(
+ #endif
+ address,
+ count
+ );
+ this->indent_next = true;
}
} // namespace archive
diff --git a/boost/archive/iterators/dataflow.hpp b/boost/archive/iterators/dataflow.hpp
index 6f8001d..07733d5 100644
--- a/boost/archive/iterators/dataflow.hpp
+++ b/boost/archive/iterators/dataflow.hpp
@@ -20,7 +20,6 @@
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/if.hpp>
-#include <boost/mpl/bool.hpp>
#include <boost/mpl/apply.hpp>
#include <boost/mpl/plus.hpp>
#include <boost/mpl/int.hpp>
diff --git a/boost/archive/iterators/istream_iterator.hpp b/boost/archive/iterators/istream_iterator.hpp
index 41aa0be..9a1d555 100644
--- a/boost/archive/iterators/istream_iterator.hpp
+++ b/boost/archive/iterators/istream_iterator.hpp
@@ -54,21 +54,6 @@ class istream_iterator :
return m_istream == rhs.m_istream;
}
-/*
- //Access the value referred to
- Elem dereference() const {
- return m_current_value;
- }
-
- void increment(){
- if(NULL != m_istream){
- m_current_value = static_cast<Elem>(m_istream->get());
- if(! m_istream->good()){
- const_cast<this_t *>(this)->m_istream = NULL;
- }
- }
- }
-*/
//Access the value referred to
Elem dereference() const {
return m_istream->peek();
diff --git a/boost/archive/iterators/mb_from_wchar.hpp b/boost/archive/iterators/mb_from_wchar.hpp
index d76eb3e..d5110de 100644
--- a/boost/archive/iterators/mb_from_wchar.hpp
+++ b/boost/archive/iterators/mb_from_wchar.hpp
@@ -18,17 +18,15 @@
#include <boost/assert.hpp>
#include <cstddef> // size_t
-#include <cwchar> // for mbstate_t and wcrtomb()
+#include <cwchar> // mbstate_t
#include <boost/config.hpp>
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
- using ::size_t;
using ::mbstate_t;
- using ::wcrtomb;
} // namespace std
#endif
-
+#include <boost/archive/detail/utf8_codecvt_facet.hpp>
#include <boost/iterator/iterator_adaptor.hpp>
namespace boost {
@@ -67,10 +65,10 @@ class mb_from_wchar
}
return m_buffer[m_bnext];
}
+
char dereference() const {
return (const_cast<this_t *>(this))->dereference_impl();
}
-
// test for iterator equality
bool equal(const mb_from_wchar<Base> & rhs) const {
// once the value is filled, the base_reference has been incremented
@@ -83,14 +81,17 @@ class mb_from_wchar
}
void fill(){
- std::mbstate_t mbs;
- std::wcrtomb(0, 0, &mbs);
wchar_t value = * this->base_reference();
- m_bend = std::wcrtomb(m_buffer, value, &mbs);
- BOOST_ASSERT(-1 != m_bend);
- BOOST_ASSERT((std::size_t)m_bend <= sizeof(m_buffer));
- BOOST_ASSERT(m_bend > 0);
+ const wchar_t *wend;
+ char *bend;
+ std::codecvt_base::result r = m_codecvt_facet.out(
+ m_mbs,
+ & value, & value + 1, wend,
+ m_buffer, m_buffer + sizeof(m_buffer), bend
+ );
+ BOOST_ASSERT(std::codecvt_base::ok == r);
m_bnext = 0;
+ m_bend = bend - m_buffer;
}
void increment(){
@@ -102,10 +103,12 @@ class mb_from_wchar
m_full = false;
}
+ boost::archive::detail::utf8_codecvt_facet m_codecvt_facet;
+ std::mbstate_t m_mbs;
// buffer to handle pending characters
- int m_bend;
- int m_bnext;
- char m_buffer[9];
+ char m_buffer[9 /* MB_CUR_MAX */];
+ std::size_t m_bend;
+ std::size_t m_bnext;
bool m_full;
public:
@@ -113,6 +116,7 @@ public:
template<class T>
mb_from_wchar(T start) :
super_t(Base(static_cast< T >(start))),
+ m_mbs(std::mbstate_t()),
m_bend(0),
m_bnext(0),
m_full(false)
diff --git a/boost/archive/iterators/wchar_from_mb.hpp b/boost/archive/iterators/wchar_from_mb.hpp
index 998a468..52a44bd 100644
--- a/boost/archive/iterators/wchar_from_mb.hpp
+++ b/boost/archive/iterators/wchar_from_mb.hpp
@@ -19,20 +19,22 @@
#include <boost/assert.hpp>
#include <cctype>
#include <cstddef> // size_t
-#include <cwchar> // mbstate_t and mbrtowc
+#include <cwchar> // mbstate_t
+#include <algorithm> // copy
#include <boost/config.hpp>
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
using ::mbstate_t;
- using ::mbrtowc;
} // namespace std
#endif
-
-#include <boost/serialization/throw_exception.hpp>
-
+#include <boost/array.hpp>
#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/archive/detail/utf8_codecvt_facet.hpp>
#include <boost/archive/iterators/dataflow_exception.hpp>
+#include <boost/serialization/throw_exception.hpp>
+
+#include <iostream>
namespace boost {
namespace archive {
@@ -62,57 +64,125 @@ class wchar_from_mb
typedef wchar_from_mb<Base> this_t;
- wchar_t drain();
+ void drain();
- wchar_t dereference_impl() {
- if(! m_full){
- m_current_value = drain();
- m_full = true;
+ wchar_t dereference() const {
+ if(m_output.m_next == m_output.m_next_available)
+ return static_cast<wchar_t>(0);
+ return * m_output.m_next;
+ }
+
+ void increment(){
+ if(m_output.m_next == m_output.m_next_available)
+ return;
+ if(++m_output.m_next == m_output.m_next_available){
+ if(m_input.m_done)
+ return;
+ drain();
}
- return m_current_value;
}
- wchar_t dereference() const {
- return const_cast<this_t *>(this)->dereference_impl();
+ bool equal(this_t const & rhs) const {
+ return dereference() == rhs.dereference();
}
- void increment(){
- dereference_impl();
- m_full = false;
- ++(this->base_reference());
+ boost::archive::detail::utf8_codecvt_facet m_codecvt_facet;
+ std::mbstate_t m_mbs;
+
+ template<typename T>
+ struct sliding_buffer {
+ boost::array<T, 32> m_buffer;
+ typename boost::array<T, 32>::const_iterator m_next_available;
+ typename boost::array<T, 32>::iterator m_next;
+ bool m_done;
+ // default ctor
+ sliding_buffer() :
+ m_next_available(m_buffer.begin()),
+ m_next(m_buffer.begin()),
+ m_done(false)
+ {}
+ // copy ctor
+ sliding_buffer(const sliding_buffer & rhs) :
+ m_next_available(
+ std::copy(
+ rhs.m_buffer.begin(),
+ rhs.m_next_available,
+ m_buffer.begin()
+ )
+ ),
+ m_next(
+ m_buffer.begin() + (rhs.m_next - rhs.m_buffer.begin())
+ ),
+ m_done(rhs.m_done)
+ {}
};
- wchar_t m_current_value;
- bool m_full;
+ sliding_buffer<typename iterator_value<Base>::type> m_input;
+ sliding_buffer<typename iterator_value<this_t>::type> m_output;
public:
// make composible buy using templated constructor
template<class T>
wchar_from_mb(T start) :
super_t(Base(static_cast< T >(start))),
- m_full(false)
- {}
- // intel 7.1 doesn't like default copy constructor
- wchar_from_mb(const wchar_from_mb & rhs) :
+ m_mbs(std::mbstate_t())
+ {
+ BOOST_ASSERT(std::mbsinit(&m_mbs));
+ drain();
+ }
+ // default constructor used as an end iterator
+ wchar_from_mb(){}
+
+ // copy ctor
+ wchar_from_mb(const wchar_from_mb & rhs) :
super_t(rhs.base_reference()),
- m_full(rhs.m_full)
+ m_mbs(rhs.m_mbs),
+ m_input(rhs.m_input),
+ m_output(rhs.m_output)
{}
};
template<class Base>
-wchar_t wchar_from_mb<Base>::drain(){
- std::mbstate_t mbs;
- wchar_t retval;
- std::size_t result;
- do {
- char val = *this->base_reference();
- result = std::mbrtowc(&retval, &val, 1, &mbs);
- if(result == static_cast<std::size_t>(-1))
- boost::serialization::throw_exception(iterators::dataflow_exception(
- iterators::dataflow_exception::invalid_conversion
- ));
- } while (result == static_cast<std::size_t>(-2));
- return retval;
+void wchar_from_mb<Base>::drain(){
+ BOOST_ASSERT(! m_input.m_done);
+ for(;;){
+ typename boost::iterators::iterator_reference<Base>::type c = *(this->base_reference());
+ // a null character in a multibyte stream is takes as end of string
+ if(0 == c){
+ m_input.m_done = true;
+ break;
+ }
+ ++(this->base_reference());
+ * const_cast<typename iterator_value<Base>::type *>(
+ (m_input.m_next_available++)
+ ) = c;
+ // if input buffer is full - we're done for now
+ if(m_input.m_buffer.end() == m_input.m_next_available)
+ break;
+ }
+ const typename boost::iterators::iterator_value<Base>::type * input_new_start;
+ typename iterator_value<this_t>::type * next_available;
+
+ std::codecvt_base::result r = m_codecvt_facet.in(
+ m_mbs,
+ m_input.m_buffer.begin(),
+ m_input.m_next_available,
+ input_new_start,
+ m_output.m_buffer.begin(),
+ m_output.m_buffer.end(),
+ next_available
+ );
+ BOOST_ASSERT(std::codecvt_base::ok == r);
+ m_output.m_next_available = next_available;
+ m_output.m_next = m_output.m_buffer.begin();
+
+ // we're done with some of the input so shift left.
+ m_input.m_next_available = std::copy(
+ input_new_start,
+ m_input.m_next_available,
+ m_input.m_buffer.begin()
+ );
+ m_input.m_next = m_input.m_buffer.begin();
}
} // namespace iterators
diff --git a/boost/archive/text_iarchive.hpp b/boost/archive/text_iarchive.hpp
index e40db83..d9d60ad 100644
--- a/boost/archive/text_iarchive.hpp
+++ b/boost/archive/text_iarchive.hpp
@@ -48,15 +48,8 @@ class BOOST_SYMBOL_VISIBLE text_iarchive_impl :
public:
#else
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
+ friend class detail::interface_iarchive<Archive>;
+ friend class load_access;
#endif
template<class T>
void load(T & t){
diff --git a/boost/archive/text_oarchive.hpp b/boost/archive/text_oarchive.hpp
index 7eaea17..9ba0daf 100644
--- a/boost/archive/text_oarchive.hpp
+++ b/boost/archive/text_oarchive.hpp
@@ -55,17 +55,9 @@ class BOOST_SYMBOL_VISIBLE text_oarchive_impl :
public:
#else
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
+ friend class detail::interface_oarchive<Archive>;
+ friend class basic_text_oarchive<Archive>;
+ friend class save_access;
#endif
template<class T>
void save(const T & t){
diff --git a/boost/archive/xml_iarchive.hpp b/boost/archive/xml_iarchive.hpp
index 055ba0f..abd2f9f 100644
--- a/boost/archive/xml_iarchive.hpp
+++ b/boost/archive/xml_iarchive.hpp
@@ -52,17 +52,9 @@ class BOOST_SYMBOL_VISIBLE xml_iarchive_impl :
public:
#else
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
+ friend class detail::interface_iarchive<Archive>;
+ friend class basic_xml_iarchive<Archive>;
+ friend class load_access;
#endif
// use boost:scoped_ptr to implement automatic deletion;
boost::scoped_ptr<xml_grammar> gimpl;
diff --git a/boost/archive/xml_oarchive.hpp b/boost/archive/xml_oarchive.hpp
index c5e6da9..eea1268 100644
--- a/boost/archive/xml_oarchive.hpp
+++ b/boost/archive/xml_oarchive.hpp
@@ -55,21 +55,10 @@ class BOOST_SYMBOL_VISIBLE xml_oarchive_impl :
public:
#else
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
+ friend class detail::interface_oarchive<Archive>;
+ friend class basic_xml_oarchive<Archive>;
+ friend class save_access;
#endif
- //void end_preamble(){
- // basic_xml_oarchive<Archive>::end_preamble();
- //}
template<class T>
void save(const T & t){
basic_text_oprimitive<std::ostream>::save(t);
@@ -96,22 +85,29 @@ protected:
#endif
BOOST_ARCHIVE_DECL
xml_oarchive_impl(std::ostream & os, unsigned int flags);
- ~xml_oarchive_impl(){}
+ BOOST_ARCHIVE_DECL
+ ~xml_oarchive_impl();
public:
- void save_binary(const void *address, std::size_t count){
- this->end_preamble();
- #if ! defined(__MWERKS__)
- this->basic_text_oprimitive<std::ostream>::save_binary(
- #else
- this->basic_text_oprimitive::save_binary(
- #endif
- address,
- count
- );
- this->indent_next = true;
- }
+ BOOST_ARCHIVE_DECL
+ void save_binary(const void *address, std::size_t count);
};
+} // namespace archive
+} // namespace boost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable : 4511 4512)
+#endif
+
+namespace boost {
+namespace archive {
+
// we use the following because we can't use
// typedef xml_oarchive_impl<xml_oarchive_impl<...> > xml_oarchive;
@@ -138,6 +134,4 @@ BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::xml_oarchive)
#pragma warning(pop)
#endif
-#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
-
#endif // BOOST_ARCHIVE_XML_OARCHIVE_HPP
diff --git a/boost/archive/xml_wiarchive.hpp b/boost/archive/xml_wiarchive.hpp
index dbc2d72..ac24289 100644
--- a/boost/archive/xml_wiarchive.hpp
+++ b/boost/archive/xml_wiarchive.hpp
@@ -29,15 +29,7 @@
#include <boost/archive/basic_xml_iarchive.hpp>
#include <boost/archive/detail/register_archive.hpp>
#include <boost/serialization/item_version_type.hpp>
-
-#ifdef BOOST_NO_CXX11_HDR_CODECVT
- #include <boost/archive/detail/utf8_codecvt_facet.hpp>
-#else
- #include <codecvt>
- namespace boost { namespace archive { namespace detail {
- typedef std::codecvt_utf8<wchar_t> utf8_codecvt_facet;
- } } }
-#endif
+// #include <boost/archive/detail/utf8_codecvt_facet.hpp>
#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
@@ -66,17 +58,9 @@ class BOOST_SYMBOL_VISIBLE xml_wiarchive_impl :
public:
#else
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
+ friend class detail::interface_iarchive<Archive>;
+ friend class basic_xml_iarchive<Archive>;
+ friend class load_access;
#endif
boost::scoped_ptr<xml_wgrammar> gimpl;
std::wistream & get_is(){
diff --git a/boost/archive/xml_woarchive.hpp b/boost/archive/xml_woarchive.hpp
index 6270016..cb7ce68 100644
--- a/boost/archive/xml_woarchive.hpp
+++ b/boost/archive/xml_woarchive.hpp
@@ -20,7 +20,6 @@
#ifdef BOOST_NO_STD_WSTREAMBUF
#error "wide char i/o not supported on this platform"
#else
-
#include <cstddef> // size_t
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
@@ -30,21 +29,13 @@ namespace std{
#include <ostream>
-#include <boost/smart_ptr/scoped_ptr.hpp>
+//#include <boost/smart_ptr/scoped_ptr.hpp>
#include <boost/archive/detail/auto_link_warchive.hpp>
#include <boost/archive/basic_text_oprimitive.hpp>
#include <boost/archive/basic_xml_oarchive.hpp>
#include <boost/archive/detail/register_archive.hpp>
#include <boost/serialization/item_version_type.hpp>
-
-#ifdef BOOST_NO_CXX11_HDR_CODECVT
- #include <boost/archive/detail/utf8_codecvt_facet.hpp>
-#else
- #include <codecvt>
- namespace boost { namespace archive { namespace detail {
- typedef std::codecvt_utf8<wchar_t> utf8_codecvt_facet;
- } } }
-#endif
+//#include <boost/archive/detail/utf8_codecvt_facet.hpp>
#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
@@ -69,27 +60,19 @@ class BOOST_SYMBOL_VISIBLE xml_woarchive_impl :
public:
#else
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
+ friend class detail::interface_oarchive<Archive>;
+ friend class basic_xml_oarchive<Archive>;
+ friend class save_access;
#endif
//void end_preamble(){
// basic_xml_oarchive<Archive>::end_preamble();
//}
template<class T>
- void
+ void
save(const T & t){
basic_text_oprimitive<std::wostream>::save(t);
}
- void
+ void
save(const version_type & t){
save(static_cast<const unsigned int>(t));
}
@@ -111,22 +94,12 @@ protected:
#endif
BOOST_WARCHIVE_DECL
xml_woarchive_impl(std::wostream & os, unsigned int flags);
- BOOST_WARCHIVE_DECL
+ BOOST_WARCHIVE_DECL
~xml_woarchive_impl();
public:
- void
- save_binary(const void *address, std::size_t count){
- this->end_preamble();
- #if ! defined(__MWERKS__)
- this->basic_text_oprimitive<std::wostream>::save_binary(
- #else
- this->basic_text_oprimitive::save_binary(
- #endif
- address,
- count
- );
- this->indent_next = true;
- }
+ BOOST_WARCHIVE_DECL void
+ save_binary(const void *address, std::size_t count);
+
};
// we use the following because we can't use
@@ -135,7 +108,7 @@ public:
// do not derive from this class. If you want to extend this functionality
// via inhertance, derived from xml_woarchive_impl instead. This will
// preserve correct static polymorphism.
-class BOOST_SYMBOL_VISIBLE xml_woarchive :
+class BOOST_SYMBOL_VISIBLE xml_woarchive :
public xml_woarchive_impl<xml_woarchive>
{
public:
diff --git a/boost/atomic/detail/ops_emulated.hpp b/boost/atomic/detail/ops_emulated.hpp
index 0dc4e68..1703291 100644
--- a/boost/atomic/detail/ops_emulated.hpp
+++ b/boost/atomic/detail/ops_emulated.hpp
@@ -89,7 +89,7 @@ struct emulated_operations
}
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
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
{
// Note: This function is the exact copy of compare_exchange_strong. The reason we're not just forwarding the call
// is that MSVC-12 ICEs in this case.
diff --git a/boost/atomic/detail/ops_gcc_x86_dcas.hpp b/boost/atomic/detail/ops_gcc_x86_dcas.hpp
index f7a84f7..47cc36d 100644
--- a/boost/atomic/detail/ops_gcc_x86_dcas.hpp
+++ b/boost/atomic/detail/ops_gcc_x86_dcas.hpp
@@ -522,7 +522,7 @@ struct gcc_dcas_x86_64
return compare_exchange_strong(storage, expected, desired, success_order, failure_order);
}
- static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
{
#if defined(__clang__)
// Clang cannot allocate eax:edx register pairs but it has sync intrinsics
diff --git a/boost/bimap/detail/debug/static_error.hpp b/boost/bimap/detail/debug/static_error.hpp
index cbb1cad..4e5cb26 100644
--- a/boost/bimap/detail/debug/static_error.hpp
+++ b/boost/bimap/detail/debug/static_error.hpp
@@ -25,7 +25,6 @@
// a static error.
/*===========================================================================*/
#define BOOST_BIMAP_STATIC_ERROR(MESSAGE,VARIABLES) \
- struct BOOST_PP_CAT(BIMAP_STATIC_ERROR__,MESSAGE) {}; \
BOOST_MPL_ASSERT_MSG(false, \
BOOST_PP_CAT(BIMAP_STATIC_ERROR__,MESSAGE), \
VARIABLES)
diff --git a/boost/compute.hpp b/boost/compute.hpp
new file mode 100644
index 0000000..83e17ac
--- /dev/null
+++ b/boost/compute.hpp
@@ -0,0 +1,44 @@
+//---------------------------------------------------------------------------//
+// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
+//
+// Distributed under the 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://boostorg.github.com/compute for more information.
+//---------------------------------------------------------------------------//
+
+#ifndef BOOST_COMPUTE_HPP
+#define BOOST_COMPUTE_HPP
+
+#include <boost/compute/algorithm.hpp>
+#include <boost/compute/allocator.hpp>
+#include <boost/compute/async.hpp>
+#include <boost/compute/buffer.hpp>
+#include <boost/compute/cl.hpp>
+#include <boost/compute/command_queue.hpp>
+#include <boost/compute/config.hpp>
+#include <boost/compute/container.hpp>
+#include <boost/compute/context.hpp>
+#include <boost/compute/device.hpp>
+#include <boost/compute/functional.hpp>
+#include <boost/compute/image.hpp>
+#include <boost/compute/iterator.hpp>
+#include <boost/compute/kernel.hpp>
+#include <boost/compute/lambda.hpp>
+#include <boost/compute/pipe.hpp>
+#include <boost/compute/platform.hpp>
+#include <boost/compute/program.hpp>
+#include <boost/compute/random.hpp>
+#include <boost/compute/svm.hpp>
+#include <boost/compute/system.hpp>
+#include <boost/compute/types.hpp>
+#include <boost/compute/user_event.hpp>
+#include <boost/compute/utility.hpp>
+#include <boost/compute/version.hpp>
+
+#ifdef BOOST_COMPUTE_HAVE_HDR_CL_EXT
+#include <boost/compute/cl_ext.hpp>
+#endif
+
+#endif // BOOST_COMPUTE_HPP
diff --git a/boost/compute/algorithm.hpp b/boost/compute/algorithm.hpp
new file mode 100644
index 0000000..686640e
--- /dev/null
+++ b/boost/compute/algorithm.hpp
@@ -0,0 +1,94 @@
+//---------------------------------------------------------------------------//
+// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
+//
+// Distributed under the 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://boostorg.github.com/compute for more information.
+//---------------------------------------------------------------------------//
+
+#ifndef BOOST_COMPUTE_ALGORITHM_HPP
+#define BOOST_COMPUTE_ALGORITHM_HPP
+
+/// \file
+///
+/// Meta-header to include all Boost.Compute algorithm headers.
+
+#include <boost/compute/algorithm/accumulate.hpp>
+#include <boost/compute/algorithm/adjacent_difference.hpp>
+#include <boost/compute/algorithm/adjacent_find.hpp>
+#include <boost/compute/algorithm/all_of.hpp>
+#include <boost/compute/algorithm/any_of.hpp>
+#include <boost/compute/algorithm/binary_search.hpp>
+#include <boost/compute/algorithm/copy.hpp>
+#include <boost/compute/algorithm/copy_if.hpp>
+#include <boost/compute/algorithm/copy_n.hpp>
+#include <boost/compute/algorithm/count.hpp>
+#include <boost/compute/algorithm/count_if.hpp>
+#include <boost/compute/algorithm/equal.hpp>
+#include <boost/compute/algorithm/equal_range.hpp>
+#include <boost/compute/algorithm/exclusive_scan.hpp>
+#include <boost/compute/algorithm/fill.hpp>
+#include <boost/compute/algorithm/fill_n.hpp>
+#include <boost/compute/algorithm/find.hpp>
+#include <boost/compute/algorithm/find_end.hpp>
+#include <boost/compute/algorithm/find_if.hpp>
+#include <boost/compute/algorithm/find_if_not.hpp>
+#include <boost/compute/algorithm/for_each.hpp>
+#include <boost/compute/algorithm/for_each_n.hpp>
+#include <boost/compute/algorithm/gather.hpp>
+#include <boost/compute/algorithm/generate.hpp>
+#include <boost/compute/algorithm/generate_n.hpp>
+#include <boost/compute/algorithm/inclusive_scan.hpp>
+#include <boost/compute/algorithm/includes.hpp>
+#include <boost/compute/algorithm/inner_product.hpp>
+#include <boost/compute/algorithm/iota.hpp>
+#include <boost/compute/algorithm/is_partitioned.hpp>
+#include <boost/compute/algorithm/is_permutation.hpp>
+#include <boost/compute/algorithm/is_sorted.hpp>
+#include <boost/compute/algorithm/lower_bound.hpp>
+#include <boost/compute/algorithm/lexicographical_compare.hpp>
+#include <boost/compute/algorithm/max_element.hpp>
+#include <boost/compute/algorithm/merge.hpp>
+#include <boost/compute/algorithm/min_element.hpp>
+#include <boost/compute/algorithm/minmax_element.hpp>
+#include <boost/compute/algorithm/mismatch.hpp>
+#include <boost/compute/algorithm/next_permutation.hpp>
+#include <boost/compute/algorithm/none_of.hpp>
+#include <boost/compute/algorithm/partial_sum.hpp>
+#include <boost/compute/algorithm/partition.hpp>
+#include <boost/compute/algorithm/partition_copy.hpp>
+#include <boost/compute/algorithm/partition_point.hpp>
+#include <boost/compute/algorithm/prev_permutation.hpp>
+#include <boost/compute/algorithm/random_shuffle.hpp>
+#include <boost/compute/algorithm/reduce.hpp>
+#include <boost/compute/algorithm/reduce_by_key.hpp>
+#include <boost/compute/algorithm/remove.hpp>
+#include <boost/compute/algorithm/remove_if.hpp>
+#include <boost/compute/algorithm/replace.hpp>
+#include <boost/compute/algorithm/replace_copy.hpp>
+#include <boost/compute/algorithm/reverse.hpp>
+#include <boost/compute/algorithm/reverse_copy.hpp>
+#include <boost/compute/algorithm/rotate.hpp>
+#include <boost/compute/algorithm/rotate_copy.hpp>
+#include <boost/compute/algorithm/scatter.hpp>
+#include <boost/compute/algorithm/search.hpp>
+#include <boost/compute/algorithm/search_n.hpp>
+#include <boost/compute/algorithm/set_difference.hpp>
+#include <boost/compute/algorithm/set_intersection.hpp>
+#include <boost/compute/algorithm/set_symmetric_difference.hpp>
+#include <boost/compute/algorithm/set_union.hpp>
+#include <boost/compute/algorithm/sort.hpp>
+#include <boost/compute/algorithm/sort_by_key.hpp>
+#include <boost/compute/algorithm/stable_partition.hpp>
+#include <boost/compute/algorithm/stable_sort.hpp>
+#include <boost/compute/algorithm/stable_sort_by_key.hpp>
+#include <boost/compute/algorithm/swap_ranges.hpp>
+#include <boost/compute/algorithm/transform.hpp>
+#include <boost/compute/algorithm/transform_reduce.hpp>
+#include <boost/compute/algorithm/unique.hpp>
+#include <boost/compute/algorithm/unique_copy.hpp>
+#include <boost/compute/algorithm/upper_bound.hpp>
+
+#endif // BOOST_COMPUTE_ALGORITHM_HPP
diff --git a/boost/compute/algorithm/accumulate.hpp b/boost/compute/algorithm/accumulate.hpp
new file mode 100644
index 0000000..328420a
--- /dev/null
+++ b/boost/compute/algorithm/accumulate.hpp
@@ -0,0 +1,184 @@
+//---------------------------------------------------------------------------//
+// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
+//
+// Distributed under the 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://boostorg.github.com/compute for more information.
+//---------------------------------------------------------------------------//
+
+#ifndef BOOST_COMPUTE_ALGORITHM_ACCUMULATE_HPP
+#define BOOST_COMPUTE_ALGORITHM_ACCUMULATE_HPP
+
+#include <boost/preprocessor/seq/for_each.hpp>
+
+#include <boost/compute/system.hpp>
+#include <boost/compute/functional.hpp>
+#include <boost/compute/command_queue.hpp>
+#include <boost/compute/algorithm/reduce.hpp>
+#include <boost/compute/algorithm/detail/serial_accumulate.hpp>
+#include <boost/compute/container/array.hpp>
+#include <boost/compute/container/vector.hpp>
+#include <boost/compute/detail/iterator_range_size.hpp>
+
+namespace boost {
+namespace compute {
+namespace detail {
+
+template<class InputIterator, class T, class BinaryFunction>
+inline T generic_accumulate(InputIterator first,
+ InputIterator last,
+ T init,
+ BinaryFunction function,
+ command_queue &queue)
+{
+ const context &context = queue.get_context();
+
+ size_t size = iterator_range_size(first, last);
+ if(size == 0){
+ return init;
+ }
+
+ // accumulate on device
+ array<T, 1> device_result(context);
+ detail::serial_accumulate(
+ first, last, device_result.begin(), init, function, queue
+ );
+
+ // copy result to host
+ T result;
+ ::boost::compute::copy_n(device_result.begin(), 1, &result, queue);
+ return result;
+}
+
+// returns true if we can use reduce() instead of accumulate() when
+// accumulate() this is true when the function is commutative (such as
+// addition of integers) and the initial value is the identity value
+// for the operation (zero for addition, one for multiplication).
+template<class T, class F>
+inline bool can_accumulate_with_reduce(T init, F function)
+{
+ (void) init;
+ (void) function;
+
+ return false;
+}
+
+/// \internal_
+#define BOOST_COMPUTE_DETAIL_DECLARE_CAN_ACCUMULATE_WITH_REDUCE(r, data, type) \
+ inline bool can_accumulate_with_reduce(type init, plus<type>) \
+ { \
+ return init == type(0); \
+ } \
+ inline bool can_accumulate_with_reduce(type init, multiplies<type>) \
+ { \
+ return init == type(1); \
+ }
+
+BOOST_PP_SEQ_FOR_EACH(
+ BOOST_COMPUTE_DETAIL_DECLARE_CAN_ACCUMULATE_WITH_REDUCE,
+ _,
+ (char_)(uchar_)(short_)(ushort_)(int_)(uint_)(long_)(ulong_)
+)
+
+template<class T>
+inline bool can_accumulate_with_reduce(T init, min<T>)
+{
+ return init == (std::numeric_limits<T>::max)();
+}
+
+template<class T>
+inline bool can_accumulate_with_reduce(T init, max<T>)
+{
+ return init == (std::numeric_limits<T>::min)();
+}
+
+#undef BOOST_COMPUTE_DETAIL_DECLARE_CAN_ACCUMULATE_WITH_REDUCE
+
+template<class InputIterator, class T, class BinaryFunction>
+inline T dispatch_accumulate(InputIterator first,
+ InputIterator last,
+ T init,
+ BinaryFunction function,
+ command_queue &queue)
+{
+ size_t size = iterator_range_size(first, last);
+ if(size == 0){
+ return init;
+ }
+
+ if(can_accumulate_with_reduce(init, function)){
+ T result;
+ reduce(first, last, &result, function, queue);
+ return result;
+ }
+ else {
+ return generic_accumulate(first, last, init, function, queue);
+ }
+}
+
+} // end detail namespace
+
+/// Returns the result of applying \p function to the elements in the
+/// range [\p first, \p last) and \p init.
+///
+/// If no function is specified, \c plus will be used.
+///
+/// \param first first element in the input range
+/// \param last last element in the input range
+/// \param init initial value
+/// \param function binary reduction function
+/// \param queue command queue to perform the operation
+///
+/// \return the accumulated result value
+///
+/// In specific situations the call to \c accumulate() can be automatically
+/// optimized to a call to the more efficient \c reduce() algorithm. This
+/// occurs when the binary reduction function is recognized as associative
+/// (such as the \c plus<int> function).
+///
+/// Note that because floating-point addition is not associative, calling
+/// \c accumulate() with \c plus<float> results in a less efficient serial
+/// reduction algorithm being executed. If a slight loss in precision is
+/// acceptable, the more efficient parallel \c reduce() algorithm should be
+/// used instead.
+///
+/// For example:
+/// \code
+/// // with vec = boost::compute::vector<int>
+/// accumulate(vec.begin(), vec.end(), 0, plus<int>()); // fast
+/// reduce(vec.begin(), vec.end(), &result, plus<int>()); // fast
+///
+/// // with vec = boost::compute::vector<float>
+/// accumulate(vec.begin(), vec.end(), 0, plus<float>()); // slow
+/// reduce(vec.begin(), vec.end(), &result, plus<float>()); // fast
+/// \endcode
+///
+/// \see reduce()
+template<class InputIterator, class T, class BinaryFunction>
+inline T accumulate(InputIterator first,
+ InputIterator last,
+ T init,
+ BinaryFunction function,
+ command_queue &queue = system::default_queue())
+{
+ return detail::dispatch_accumulate(first, last, init, function, queue);
+}
+
+/// \overload
+template<class InputIterator, class T>
+inline T accumulate(InputIterator first,
+ InputIterator last,
+ T init,
+ command_queue &queue = system::default_queue())
+{
+ typedef typename std::iterator_traits<InputIterator>::value_type IT;
+
+ return detail::dispatch_accumulate(first, last, init, plus<IT>(), queue);
+}
+
+} // end compute namespace
+} // end boost namespace
+
+#endif // BOOST_COMPUTE_ALGORITHM_ACCUMULATE_HPP
diff --git a/boost/compute/algorithm/adjacent_difference.hpp b/boost/compute/algorithm/adjacent_difference.hpp
new file mode 100644
index 0000000..a8f84e0
--- /dev/null
+++ b/boost/compute/algorithm/adjacent_difference.hpp
@@ -0,0 +1,98 @@
+//---------------------------------------------------------------------------//
+// Copyright (c) 2013-2014 Kyle Lutz <kyle.r.lutz@gmail.com>
+//
+// Distributed under the 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://boostorg.github.com/compute for more information.
+//---------------------------------------------------------------------------//
+
+#ifndef BOOST_COMPUTE_ALGORITHM_ADJACENT_DIFFERENCE_HPP
+#define BOOST_COMPUTE_ALGORITHM_ADJACENT_DIFFERENCE_HPP
+
+#include <iterator>
+
+#include <boost/compute/system.hpp>
+#include <boost/compute/command_queue.hpp>
+#include <boost/compute/detail/meta_kernel.hpp>
+#include <boost/compute/detail/iterator_range_size.hpp>
+#include <boost/compute/functional/operator.hpp>
+#include <boost/compute/container/vector.hpp>
+
+namespace boost {
+namespace compute {
+
+/// Stores the difference of each pair of consecutive values in the range
+/// [\p first, \p last) to the range beginning at \p result. If \p op is not
+/// provided, \c minus<T> is used.
+///
+/// \param first first element in the input range
+/// \param last last element in the input range
+/// \param result first element in the output range
+/// \param op binary difference function
+/// \param queue command queue to perform the operation
+///
+/// \return \c OutputIterator to the end of the result range
+///
+/// \see adjacent_find()
+template<class InputIterator, class OutputIterator, class BinaryFunction>
+inline OutputIterator
+adjacent_difference(InputIterator first,
+ InputIterator last,
+ OutputIterator result,
+ BinaryFunction op,
+ command_queue &queue = system::default_queue())
+{
+ if(first == last){
+ return result;
+ }
+
+ size_t count = detail::iterator_range_size(first, last);
+
+ detail::meta_kernel k("adjacent_difference");
+
+ k << "const uint i = get_global_id(0);\n"
+ << "if(i == 0){\n"
+ << " " << result[k.var<uint_>("0")] << " = " << first[k.var<uint_>("0")] << ";\n"
+ << "}\n"
+ << "else {\n"
+ << " " << result[k.var<uint_>("i")] << " = "
+ << op(first[k.var<uint_>("i")], first[k.var<uint_>("i-1")]) << ";\n"
+ << "}\n";
+
+ k.exec_1d(queue, 0, count, 1);
+
+ return result + count;
+}
+
+/// \overload
+template<class InputIterator, class OutputIterator>
+inline OutputIterator
+adjacent_difference(InputIterator first,
+ InputIterator last,
+ OutputIterator result,
+ command_queue &queue = system::default_queue())
+{
+ typedef typename std::iterator_traits<InputIterator>::value_type value_type;
+
+ if (first == result) {
+ vector<value_type> temp(detail::iterator_range_size(first, last),
+ queue.get_context());
+ copy(first, last, temp.begin(), queue);
+
+ return ::boost::compute::adjacent_difference(
+ temp.begin(), temp.end(), result, ::boost::compute::minus<value_type>(), queue
+ );
+ }
+ else {
+ return ::boost::compute::adjacent_difference(
+ first, last, result, ::boost::compute::minus<value_type>(), queue
+ );
+ }
+}
+
+} // end compute namespace
+} // end boost namespace
+
+#endif // BOOST_COMPUTE_ALGORITHM_ADJACENT_DIFFERENCE_HPP
diff --git a/boost/compute/algorithm/adjacent_find.hpp b/boost/compute/algorithm/adjacent_find.hpp
new file mode 100644
index 0000000..992a01e
--- /dev/null
+++ b/boost/compute/algorithm/adjacent_find.hpp
@@ -0,0 +1,162 @@
+//---------------------------------------------------------------------------//
+// Copyright (c) 2013-2014 Kyle Lutz <kyle.r.lutz@gmail.com>
+//
+// Distributed under the 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://boostorg.github.com/compute for more information.
+//---------------------------------------------------------------------------//
+
+#ifndef BOOST_COMPUTE_ALGORITHM_ADJACENT_FIND_HPP
+#define BOOST_COMPUTE_ALGORITHM_ADJACENT_FIND_HPP
+
+#include <iterator>
+
+#include <boost/compute/command_queue.hpp>
+#include <boost/compute/lambda.hpp>
+#include <boost/compute/system.hpp>
+#include <boost/compute/container/detail/scalar.hpp>
+#include <boost/compute/detail/iterator_range_size.hpp>
+#include <boost/compute/detail/meta_kernel.hpp>
+#include <boost/compute/functional/operator.hpp>
+#include <boost/compute/type_traits/vector_size.hpp>
+
+namespace boost {
+namespace compute {
+namespace detail {
+
+template<class InputIterator, class Compare>
+inline InputIterator
+serial_adjacent_find(InputIterator first,
+ InputIterator last,
+ Compare compare,
+ command_queue &queue)
+{
+ if(first == last){
+ return last;
+ }
+
+ const context &context = queue.get_context();
+
+ detail::scalar<uint_> output(context);
+
+ detail::meta_kernel k("serial_adjacent_find");
+
+ size_t size_arg = k.add_arg<const uint_>("size");
+ size_t output_arg = k.add_arg<uint_ *>(memory_object::global_memory, "output");
+
+ k << k.decl<uint_>("result") << " = size;\n"
+ << "for(uint i = 0; i < size - 1; i++){\n"
+ << " if(" << compare(first[k.expr<uint_>("i")],
+ first[k.expr<uint_>("i+1")]) << "){\n"
+ << " result = i;\n"
+ << " break;\n"
+ << " }\n"
+ << "}\n"
+ << "*output = result;\n";
+
+ k.set_arg<const uint_>(
+ size_arg, static_cast<uint_>(detail::iterator_range_size(first, last))
+ );
+ k.set_arg(output_arg, output.get_buffer());
+
+ k.exec_1d(queue, 0, 1, 1);
+
+ return first + output.read(queue);
+}
+
+template<class InputIterator, class Compare>
+inline InputIterator
+adjacent_find_with_atomics(InputIterator first,
+ InputIterator last,
+ Compare compare,
+ command_queue &queue)
+{
+ if(first == last){
+ return last;
+ }
+
+ const context &context = queue.get_context();
+ size_t count = detail::iterator_range_size(first, last);
+
+ // initialize output to the last index
+ detail::scalar<uint_> output(context);
+ output.write(static_cast<uint_>(count), queue);
+
+ detail::meta_kernel k("adjacent_find_with_atomics");
+
+ size_t output_arg = k.add_arg<uint_ *>(memory_object::global_memory, "output");
+
+ k << "const uint i = get_global_id(0);\n"
+ << "if(" << compare(first[k.expr<uint_>("i")],
+ first[k.expr<uint_>("i+1")]) << "){\n"
+ << " atomic_min(output, i);\n"
+ << "}\n";
+
+ k.set_arg(output_arg, output.get_buffer());
+
+ k.exec_1d(queue, 0, count - 1, 1);
+
+ return first + output.read(queue);
+}
+
+} // end detail namespace
+
+/// Searches the range [\p first, \p last) for two identical adjacent
+/// elements and returns an iterator pointing to the first.
+///
+/// \param first first element in the range to search
+/// \param last last element in the range to search
+/// \param compare binary comparison function
+/// \param queue command queue to perform the operation
+///
+/// \return \c InputIteratorm to the first element which compares equal
+/// to the following element. If none are equal, returns \c last.
+///
+/// \see find(), adjacent_difference()
+template<class InputIterator, class Compare>
+inline InputIterator
+adjacent_find(InputIterator first,
+ InputIterator last,
+ Compare compare,
+ command_queue &queue = system::default_queue())
+{
+ size_t count = detail::iterator_range_size(first, last);
+ if(count < 32){
+ return detail::serial_adjacent_find(first, last, compare, queue);
+ }
+ else {
+ return detail::adjacent_find_with_atomics(first, last, compare, queue);
+ }
+}
+
+/// \overload
+template<class InputIterator>
+inline InputIterator
+adjacent_find(InputIterator first,
+ InputIterator last,
+ command_queue &queue = system::default_queue())
+{
+ typedef typename std::iterator_traits<InputIterator>::value_type value_type;
+
+ using ::boost::compute::lambda::_1;
+ using ::boost::compute::lambda::_2;
+ using ::boost::compute::lambda::all;
+
+ if(vector_size<value_type>::value == 1){
+ return ::boost::compute::adjacent_find(
+ first, last, _1 == _2, queue
+ );
+ }
+ else {
+ return ::boost::compute::adjacent_find(
+ first, last, all(_1 == _2), queue
+ );
+ }
+}
+
+} // end compute namespace
+} // end boost namespace
+
+#endif // BOOST_COMPUTE_ALGORITHM_ADJACENT_FIND_HPP
diff --git a/boost/compute/algorithm/all_of.hpp b/boost/compute/algorithm/all_of.hpp
new file mode 100644
index 0000000..34d7518
--- /dev/null
+++ b/boost/compute/algorithm/all_of.hpp
@@ -0,0 +1,36 @@
+//---------------------------------------------------------------------------//
+// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
+//
+// Distributed under the 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://boostorg.github.com/compute for more information.
+//---------------------------------------------------------------------------//
+
+#ifndef BOOST_COMPUTE_ALGORITHM_ALL_OF_HPP
+#define BOOST_COMPUTE_ALGORITHM_ALL_OF_HPP
+
+#include <boost/compute/system.hpp>
+#include <boost/compute/algorithm/find_if_not.hpp>
+
+namespace boost {
+namespace compute {
+
+/// Returns \c true if \p predicate returns \c true for all of the elements in
+/// the range [\p first, \p last).
+///
+/// \see any_of(), none_of()
+template<class InputIterator, class UnaryPredicate>
+inline bool all_of(InputIterator first,
+ InputIterator last,
+ UnaryPredicate predicate,
+ command_queue &queue = system::default_queue())
+{
+ return ::boost::compute::find_if_not(first, last, predicate, queue) == last;
+}
+
+} // end compute namespace
+} // end boost namespace
+
+#endif // BOOST_COMPUTE_ALGORITHM_ALL_OF_HPP
diff --git a/boost/compute/algorithm/any_of.hpp b/boost/compute/algorithm/any_of.hpp
new file mode 100644
index 0000000..b077795
--- /dev/null
+++ b/boost/compute/algorithm/any_of.hpp
@@ -0,0 +1,40 @@
+//---------------------------------------------------------------------------//
+// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
+//
+// Distributed under the 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://boostorg.github.com/compute for more information.
+//---------------------------------------------------------------------------//
+
+#ifndef BOOST_COMPUTE_ALGORITHM_ANY_OF_HPP
+#define BOOST_COMPUTE_ALGORITHM_ANY_OF_HPP
+
+#include <boost/compute/system.hpp>
+#include <boost/compute/algorithm/find_if.hpp>
+
+namespace boost {
+namespace compute {
+
+/// Returns \c true if \p predicate returns \c true for any of the elements in
+/// the range [\p first, \p last).
+///
+/// For example, to test if a vector contains any negative values:
+///
+/// \snippet test/test_any_all_none_of.cpp any_of
+///
+/// \see all_of(), none_of()
+template<class InputIterator, class UnaryPredicate>
+inline bool any_of(InputIterator first,
+ InputIterator last,
+ UnaryPredicate predicate,
+ command_queue &queue = system::default_queue())
+{
+ return ::boost::compute::find_if(first, last, predicate, queue) != last;
+}
+
+} // end compute namespace
+} // end boost namespace
+
+#endif // BOOST_COMPUTE_ALGORITHM_ANY_OF_HPP
diff --git a/boost/compute/algorithm/binary_search.hpp b/boost/compute/algorithm/binary_search.hpp
new file mode 100644
index 0000000..6e19498
--- /dev/null
+++ b/boost/compute/algorithm/binary_search.hpp
@@ -0,0 +1,37 @@
+//---------------------------------------------------------------------------//
+// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
+//
+// Distributed under the 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://boostorg.github.com/compute for more information.
+//---------------------------------------------------------------------------//
+
+#ifndef BOOST_COMPUTE_ALGORITHM_BINARY_SEARCH_HPP
+#define BOOST_COMPUTE_ALGORITHM_BINARY_SEARCH_HPP
+
+#include <boost/compute/system.hpp>
+#include <boost/compute/command_queue.hpp>
+#include <boost/compute/algorithm/lower_bound.hpp>
+
+namespace boost {
+namespace compute {
+
+/// Returns \c true if \p value is in the sorted range [\p first,
+/// \p last).
+template<class InputIterator, class T>
+inline bool binary_search(InputIterator first,
+ InputIterator last,
+ const T &value,
+ command_queue &queue = system::default_queue())
+{
+ InputIterator position = lower_bound(first, last, value, queue);
+
+ return position != last && position.read(queue) == value;
+}
+
+} // end compute namespace
+} // end boost namespace
+
+#endif // BOOST_COMPUTE_ALGORITHM_BINARY_SEARCH_HPP
diff --git a/boost/compute/algorithm/copy.hpp b/boost/compute/algorithm/copy.hpp
new file mode 100644
index 0000000..2a25059
--- /dev/null
+++ b/boost/compute/algorithm/copy.hpp
@@ -0,0 +1,362 @@
+//---------------------------------------------------------------------------//
+// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
+//
+// Distributed under the 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://boostorg.github.com/compute for more information.
+//---------------------------------------------------------------------------//
+
+#ifndef BOOST_COMPUTE_ALGORITHM_COPY_HPP
+#define BOOST_COMPUTE_ALGORITHM_COPY_HPP
+
+#include <algorithm>
+#include <iterator>
+
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+#include <boost/compute/buffer.hpp>
+#include <boost/compute/system.hpp>
+#include <boost/compute/command_queue.hpp>
+#include <boost/compute/algorithm/detail/copy_on_device.hpp>
+#include <boost/compute/algorithm/detail/copy_to_device.hpp>
+#include <boost/compute/algorithm/detail/copy_to_host.hpp>
+#include <boost/compute/async/future.hpp>
+#include <boost/compute/detail/is_contiguous_iterator.hpp>
+#include <boost/compute/detail/iterator_range_size.hpp>
+#include <boost/compute/iterator/buffer_iterator.hpp>
+#include <boost/compute/type_traits/is_device_iterator.hpp>
+
+namespace boost {
+namespace compute {
+namespace detail {
+
+namespace mpl = boost::mpl;
+
+// meta-function returning true if copy() between InputIterator and
+// OutputIterator can be implemented with clEnqueueCopyBuffer().
+template<class InputIterator, class OutputIterator>
+struct can_copy_with_copy_buffer :
+ mpl::and_<
+ boost::is_same<
+ InputIterator,
+ buffer_iterator<typename InputIterator::value_type>
+ >,
+ boost::is_same<
+ OutputIterator,
+ buffer_iterator<typename OutputIterator::value_type>
+ >,
+ boost::is_same<
+ typename InputIterator::value_type,
+ typename OutputIterator::value_type
+ >
+ >::type {};
+
+// host -> device
+template<class InputIterator, class OutputIterator>
+inline OutputIterator
+dispatch_copy(InputIterator first,
+ InputIterator last,
+ OutputIterator result,
+ command_queue &queue,
+ typename boost::enable_if_c<
+ !is_device_iterator<InputIterator>::value &&
+ is_device_iterator<OutputIterator>::value
+ >::type* = 0)
+{
+ if(is_contiguous_iterator<InputIterator>::value){
+ return copy_to_device(first, last, result, queue);
+ }
+ else {
+ // for non-contiguous input we first copy the values to
+ // a temporary std::vector and then copy from there
+ typedef typename std::iterator_traits<InputIterator>::value_type T;
+ std::vector<T> vector(first, last);
+ return copy_to_device(vector.begin(), vector.end(), result, queue);
+ }
+}
+
+// host -> device (async)
+template<class InputIterator, class OutputIterator>
+inline future<OutputIterator>
+dispatch_copy_async(InputIterator first,
+ InputIterator last,
+ OutputIterator result,
+ command_queue &queue,
+ typename boost::enable_if_c<
+ !is_device_iterator<InputIterator>::value &&
+ is_device_iterator<OutputIterator>::value
+ >::type* = 0)
+{
+ BOOST_STATIC_ASSERT_MSG(
+ is_contiguous_iterator<InputIterator>::value,
+ "copy_async() is only supported for contiguous host iterators"
+ );
+
+ return copy_to_device_async(first, last, result, queue);
+}
+
+// device -> host
+template<class InputIterator, class OutputIterator>
+inline OutputIterator
+dispatch_copy(InputIterator first,
+ InputIterator last,
+ OutputIterator result,
+ command_queue &queue,
+ typename boost::enable_if_c<
+ is_device_iterator<InputIterator>::value &&
+ !is_device_iterator<OutputIterator>::value
+ >::type* = 0)
+{
+ if(is_contiguous_iterator<OutputIterator>::value){
+ return copy_to_host(first, last, result, queue);
+ }
+ else {
+ // for non-contiguous input we first copy the values to
+ // a temporary std::vector and then copy from there
+ typedef typename std::iterator_traits<InputIterator>::value_type T;
+ std::vector<T> vector(iterator_range_size(first, last));
+ copy_to_host(first, last, vector.begin(), queue);
+ return std::copy(vector.begin(), vector.end(), result);
+ }
+}
+
+// device -> host (async)
+template<class InputIterator, class OutputIterator>
+inline future<OutputIterator>
+dispatch_copy_async(InputIterator first,
+ InputIterator last,
+ OutputIterator result,
+ command_queue &queue,
+ typename boost::enable_if_c<
+ is_device_iterator<InputIterator>::value &&
+ !is_device_iterator<OutputIterator>::value
+ >::type* = 0)
+{
+ BOOST_STATIC_ASSERT_MSG(
+ is_contiguous_iterator<OutputIterator>::value,
+ "copy_async() is only supported for contiguous host iterators"
+ );
+
+ return copy_to_host_async(first, last, result, queue);
+}
+
+// device -> device
+template<class InputIterator, class OutputIterator>
+inline OutputIterator
+dispatch_copy(InputIterator first,
+ InputIterator last,
+ OutputIterator result,
+ command_queue &queue,
+ typename boost::enable_if<
+ mpl::and_<
+ is_device_iterator<InputIterator>,
+ is_device_iterator<OutputIterator>,
+ mpl::not_<
+ can_copy_with_copy_buffer<
+ InputIterator, OutputIterator
+ >
+ >
+ >
+ >::type* = 0)
+{
+ return copy_on_device(first, last, result, queue);
+}
+
+// device -> device (specialization for buffer iterators)
+template<class InputIterator, class OutputIterator>
+inline OutputIterator
+dispatch_copy(InputIterator first,
+ InputIterator last,
+ OutputIterator result,
+ command_queue &queue,
+ typename boost::enable_if<
+ mpl::and_<
+ is_device_iterator<InputIterator>,
+ is_device_iterator<OutputIterator>,
+ can_copy_with_copy_buffer<
+ InputIterator, OutputIterator
+ >
+ >
+ >::type* = 0)
+{
+ typedef typename std::iterator_traits<InputIterator>::value_type value_type;
+ typedef typename std::iterator_traits<InputIterator>::difference_type difference_type;
+
+ difference_type n = std::distance(first, last);
+ if(n < 1){
+ // nothing to copy
+ return result;
+ }
+
+ queue.enqueue_copy_buffer(first.get_buffer(),
+ result.get_buffer(),
+ first.get_index() * sizeof(value_type),
+ result.get_index() * sizeof(value_type),
+ static_cast<size_t>(n) * sizeof(value_type));
+ return result + n;
+}
+
+// device -> device (async)
+template<class InputIterator, class OutputIterator>
+inline future<OutputIterator>
+dispatch_copy_async(InputIterator first,
+ InputIterator last,
+ OutputIterator result,
+ command_queue &queue,
+ typename boost::enable_if<
+ mpl::and_<
+ is_device_iterator<InputIterator>,
+ is_device_iterator<OutputIterator>,
+ mpl::not_<
+ can_copy_with_copy_buffer<
+ InputIterator, OutputIterator
+ >
+ >
+ >
+ >::type* = 0)
+{
+ return copy_on_device_async(first, last, result, queue);
+}
+
+// device -> device (async, specialization for buffer iterators)
+template<class InputIterator, class OutputIterator>
+inline future<OutputIterator>
+dispatch_copy_async(InputIterator first,
+ InputIterator last,
+ OutputIterator result,
+ command_queue &queue,
+ typename boost::enable_if<
+ mpl::and_<
+ is_device_iterator<InputIterator>,
+ is_device_iterator<OutputIterator>,
+ can_copy_with_copy_buffer<
+ InputIterator, OutputIterator
+ >
+ >
+ >::type* = 0)
+{
+ typedef typename std::iterator_traits<InputIterator>::value_type value_type;
+ typedef typename std::iterator_traits<InputIterator>::difference_type difference_type;
+
+ difference_type n = std::distance(first, last);
+ if(n < 1){
+ // nothing to copy
+ return make_future(result, event());
+ }
+
+ event event_ =
+ queue.enqueue_copy_buffer(
+ first.get_buffer(),
+ result.get_buffer(),
+ first.get_index() * sizeof(value_type),
+ result.get_index() * sizeof(value_type),
+ static_cast<size_t>(n) * sizeof(value_type)
+ );
+
+ return make_future(result + n, event_);
+}
+
+// host -> host
+template<class InputIterator, class OutputIterator>
+inline OutputIterator
+dispatch_copy(InputIterator first,
+ InputIterator last,
+ OutputIterator result,
+ command_queue &queue,
+ typename boost::enable_if_c<
+ !is_device_iterator<InputIterator>::value &&
+ !is_device_iterator<OutputIterator>::value
+ >::type* = 0)
+{
+ (void) queue;
+
+ return std::copy(first, last, result);
+}
+
+} // end detail namespace
+
+/// Copies the values in the range [\p first, \p last) to the range
+/// beginning at \p result.
+///
+/// The generic copy() function can be used for a variety of data
+/// transfer tasks and provides a standard interface to the following
+/// OpenCL functions:
+///
+/// \li \c clEnqueueReadBuffer()
+/// \li \c clEnqueueWriteBuffer()
+/// \li \c clEnqueueCopyBuffer()
+///
+/// Unlike the aforementioned OpenCL functions, copy() will also work
+/// with non-contiguous data-structures (e.g. \c std::list<T>) as
+/// well as with "fancy" iterators (e.g. transform_iterator).
+///
+/// \param first first element in the range to copy
+/// \param last last element in the range to copy
+/// \param result first element in the result range
+/// \param queue command queue to perform the operation
+///
+/// \return \c OutputIterator to the end of the result range
+///
+/// For example, to copy an array of \c int values on the host to a vector on
+/// the device:
+/// \code
+/// // array on the host
+/// int data[] = { 1, 2, 3, 4 };
+///
+/// // vector on the device
+/// boost::compute::vector<int> vec(4, context);
+///
+/// // copy values to the device vector
+/// boost::compute::copy(data, data + 4, vec.begin(), queue);
+/// \endcode
+///
+/// The copy algorithm can also be used with standard containers such as
+/// \c std::vector<T>:
+/// \code
+/// std::vector<int> host_vector = ...
+/// boost::compute::vector<int> device_vector = ...
+///
+/// // copy from the host to the device
+/// boost::compute::copy(
+/// host_vector.begin(), host_vector.end(), device_vector.begin(), queue
+/// );
+///
+/// // copy from the device to the host
+/// boost::compute::copy(
+/// device_vector.begin(), device_vector.end(), host_vector.begin(), queue
+/// );
+/// \endcode
+///
+/// \see copy_n(), copy_if(), copy_async()
+template<class InputIterator, class OutputIterator>
+inline OutputIterator copy(InputIterator first,
+ InputIterator last,
+ OutputIterator result,
+ command_queue &queue = system::default_queue())
+{
+ return detail::dispatch_copy(first, last, result, queue);
+}
+
+/// Copies the values in the range [\p first, \p last) to the range
+/// beginning at \p result. The copy is performed asynchronously.
+///
+/// \see copy()
+template<class InputIterator, class OutputIterator>
+inline future<OutputIterator>
+copy_async(InputIterator first,
+ InputIterator last,
+ OutputIterator result,
+ command_queue &queue = system::default_queue())
+{
+ return detail::dispatch_copy_async(first, last, result, queue);
+}
+
+} // end compute namespace
+} // end boost namespace
+
+#endif // BOOST_COMPUTE_ALGORITHM_COPY_HPP
diff --git a/boost/compute/algorithm/copy_if.hpp b/boost/compute/algorithm/copy_if.hpp
new file mode 100644
index 0000000..3cd08ef
--- /dev/null
+++ b/boost/compute/algorithm/copy_if.hpp
@@ -0,0 +1,58 @@
+//---------------------------------------------------------------------------//
+// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
+//
+// Distributed under the 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://boostorg.github.com/compute for more information.
+//---------------------------------------------------------------------------//
+
+#ifndef BOOST_COMPUTE_ALGORITHM_COPY_IF_HPP
+#define BOOST_COMPUTE_ALGORITHM_COPY_IF_HPP
+
+#include <boost/compute/algorithm/transform_if.hpp>
+#include <boost/compute/functional/identity.hpp>
+
+namespace boost {
+namespace compute {
+namespace detail {
+
+// like the copy_if() algorithm but writes the indices of the values for which
+// predicate returns true.
+template<class InputIterator, class OutputIterator, class Predicate>
+inline OutputIterator copy_index_if(InputIterator first,
+ InputIterator last,
+ OutputIterator result,
+ Predicate predicate,
+ command_queue &queue = system::default_queue())
+{
+ typedef typename std::iterator_traits<InputIterator>::value_type T;
+
+ return detail::transform_if_impl(
+ first, last, result, identity<T>(), predicate, true, queue
+ );
+}
+
+} // end detail namespace
+
+/// Copies each element in the range [\p first, \p last) for which
+/// \p predicate returns \c true to the range beginning at \p result.
+template<class InputIterator, class OutputIterator, class Predicate>
+inline OutputIterator copy_if(InputIterator first,
+ InputIterator last,
+ OutputIterator result,
+ Predicate predicate,
+ command_queue &queue = system::default_queue())
+{
+ typedef typename std::iterator_traits<InputIterator>::value_type T;
+
+ return ::boost::compute::transform_if(
+ first, last, result, identity<T>(), predicate, queue
+ );
+}
+
+} // end compute namespace
+} // end boost namespace
+
+#endif // BOOST_COMPUTE_ALGORITHM_COPY_IF_HPP
diff --git a/boost/compute/algorithm/copy_n.hpp b/boost/compute/algorithm/copy_n.hpp
new file mode 100644
index 0000000..f0989ed
--- /dev/null
+++ b/boost/compute/algorithm/copy_n.hpp
@@ -0,0 +1,51 @@
+//---------------------------------------------------------------------------//
+// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
+//
+// Distributed under the 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://boostorg.github.com/compute for more information.
+//---------------------------------------------------------------------------//
+
+#ifndef BOOST_COMPUTE_ALGORITHM_COPY_N_HPP
+#define BOOST_COMPUTE_ALGORITHM_COPY_N_HPP
+
+#include <boost/compute/system.hpp>
+#include <boost/compute/command_queue.hpp>
+#include <boost/compute/algorithm/copy.hpp>
+
+namespace boost {
+namespace compute {
+
+/// Copies \p count elements from \p first to \p result.
+///
+/// For example, to copy four values from the host to the device:
+/// \code
+/// // values on the host and vector on the device
+/// float values[4] = { 1.f, 2.f, 3.f, 4.f };
+/// boost::compute::vector<float> vec(4, context);
+///
+/// // copy from the host to the device
+/// boost::compute::copy_n(values, 4, vec.begin(), queue);
+/// \endcode
+///
+/// \see copy()
+template<class InputIterator, class Size, class OutputIterator>
+inline OutputIterator copy_n(InputIterator first,
+ Size count,
+ OutputIterator result,
+ command_queue &queue = system::default_queue())
+{
+ typedef typename std::iterator_traits<InputIterator>::difference_type difference_type;
+
+ return ::boost::compute::copy(first,
+ first + static_cast<difference_type>(count),
+ result,
+ queue);
+}
+
+} // end compute namespace
+} // end boost namespace
+
+#endif // BOOST_COMPUTE_ALGORITHM_COPY_N_HPP
diff --git a/boost/compute/algorithm/count.hpp b/boost/compute/algorithm/count.hpp
new file mode 100644
index 0000000..140d673
--- /dev/null
+++ b/boost/compute/algorithm/count.hpp
@@ -0,0 +1,55 @@
+//---------------------------------------------------------------------------//
+// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
+//
+// Distributed under the 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://boostorg.github.com/compute for more information.
+//---------------------------------------------------------------------------//
+
+#ifndef BOOST_COMPUTE_ALGORITHM_COUNT_HPP
+#define BOOST_COMPUTE_ALGORITHM_COUNT_HPP
+
+#include <boost/compute/lambda.hpp>
+#include <boost/compute/system.hpp>
+#include <boost/compute/command_queue.hpp>
+#include <boost/compute/algorithm/count_if.hpp>
+#include <boost/compute/type_traits/vector_size.hpp>
+
+namespace boost {
+namespace compute {
+
+/// Returns the number of occurrences of \p value in the range
+/// [\p first, \p last).
+///
+/// \see count_if()
+template<class InputIterator, class T>
+inline size_t count(InputIterator first,
+ InputIterator last,
+ const T &value,
+ command_queue &queue = system::default_queue())
+{
+ typedef typename std::iterator_traits<InputIterator>::value_type value_type;
+
+ using ::boost::compute::_1;
+ using ::boost::compute::lambda::all;
+
+ if(vector_size<value_type>::value == 1){
+ return ::boost::compute::count_if(first,
+ last,
+ _1 == value,
+ queue);
+ }
+ else {
+ return ::boost::compute::count_if(first,
+ last,
+ all(_1 == value),
+ queue);
+ }
+}
+
+} // end compute namespace
+} // end boost namespace
+
+#endif // BOOST_COMPUTE_ALGORITHM_COUNT_HPP
diff --git a/boost/compute/algorithm/count_if.hpp b/boost/compute/algorithm/count_if.hpp
new file mode 100644
index 0000000..c9381ce
--- /dev/null
+++ b/boost/compute/algorithm/count_if.hpp
@@ -0,0 +1,62 @@
+//---------------------------------------------------------------------------//
+// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
+//
+// Distributed under the 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://boostorg.github.com/compute for more information.
+//---------------------------------------------------------------------------//
+
+#ifndef BOOST_COMPUTE_ALGORITHM_COUNT_IF_HPP
+#define BOOST_COMPUTE_ALGORITHM_COUNT_IF_HPP
+
+#include <boost/compute/device.hpp>
+#include <boost/compute/system.hpp>
+#include <boost/compute/command_queue.hpp>
+#include <boost/compute/algorithm/detail/count_if_with_ballot.hpp>
+#include <boost/compute/algorithm/detail/count_if_with_reduce.hpp>
+#include <boost/compute/algorithm/detail/count_if_with_threads.hpp>
+#include <boost/compute/algorithm/detail/serial_count_if.hpp>
+#include <boost/compute/detail/iterator_range_size.hpp>
+
+namespace boost {
+namespace compute {
+
+/// Returns the number of elements in the range [\p first, \p last)
+/// for which \p predicate returns \c true.
+template<class InputIterator, class Predicate>
+inline size_t count_if(InputIterator first,
+ InputIterator last,
+ Predicate predicate,
+ command_queue &queue = system::default_queue())
+{
+ const device &device = queue.get_device();
+
+ size_t input_size = detail::iterator_range_size(first, last);
+ if(input_size == 0){
+ return 0;
+ }
+
+ if(device.type() & device::cpu){
+ if(input_size < 1024){
+ return detail::serial_count_if(first, last, predicate, queue);
+ }
+ else {
+ return detail::count_if_with_threads(first, last, predicate, queue);
+ }
+ }
+ else {
+ if(input_size < 32){
+ return detail::serial_count_if(first, last, predicate, queue);
+ }
+ else {
+ return detail::count_if_with_reduce(first, last, predicate, queue);
+ }
+ }
+}
+
+} // end compute namespace
+} // end boost namespace
+
+#endif // BOOST_COMPUTE_ALGORITHM_COUNT_IF_HPP
diff --git a/boost/compute/algorithm/detail/balanced_path.hpp b/boost/compute/algorithm/detail/balanced_path.hpp
new file mode 100644
index 0000000..e502553
--- /dev/null
+++ b/boost/compute/algorithm/detail/balanced_path.hpp
@@ -0,0 +1,162 @@
+//---------------------------------------------------------------------------//
+// Copyright (c) 2014 Roshan <thisisroshansmail@gmail.com>
+//
+// Distributed under the 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://boostorg.github.com/compute for more information.
+//---------------------------------------------------------------------------//
+
+#ifndef BOOST_COMPUTE_ALGORITHM_DETAIL_BALANCED_PATH_HPP
+#define BOOST_COMPUTE_ALGORITHM_DETAIL_BALANCED_PATH_HPP
+
+#include <iterator>
+
+#include <boost/compute/algorithm/find_if.hpp>
+#include <boost/compute/container/vector.hpp>
+#include <boost/compute/detail/iterator_range_size.hpp>
+#include <boost/compute/detail/meta_kernel.hpp>
+#include <boost/compute/lambda.hpp>
+#include <boost/compute/system.hpp>
+
+namespace boost {
+namespace compute {
+namespace detail {
+
+///
+/// \brief Balanced Path kernel class
+///
+/// Subclass of meta_kernel to break two sets into tiles according
+/// to their balanced path.
+///
+class balanced_path_kernel : public meta_kernel
+{
+public:
+ unsigned int tile_size;
+
+ balanced_path_kernel() : meta_kernel("balanced_path")
+ {
+ tile_size = 4;
+ }
+
+ template<class InputIterator1, class InputIterator2,
+ class OutputIterator1, class OutputIterator2,
+ class Compare>
+ void set_range(InputIterator1 first1,
+ InputIterator1 last1,
+ InputIterator2 first2,
+ InputIterator2 last2,
+ OutputIterator1 result_a,
+ OutputIterator2 result_b,
+ Compare comp)
+ {
+ typedef typename std::iterator_traits<InputIterator1>::value_type value_type;
+
+ m_a_count = iterator_range_size(first1, last1);
+ m_a_count_arg = add_arg<uint_>("a_count");
+
+ m_b_count = iterator_range_size(first2, last2);
+ m_b_count_arg = add_arg<uint_>("b_count");
+
+ *this <<
+ "uint i = get_global_id(0);\n" <<
+ "uint target = (i+1)*" << tile_size << ";\n" <<
+ "uint start = max(convert_int(0),convert_int(target)-convert_int(b_count));\n" <<
+ "uint end = min(target,a_count);\n" <<
+ "uint a_index, b_index;\n" <<
+ "while(start<end)\n" <<
+ "{\n" <<
+ " a_index = (start + end)/2;\n" <<
+ " b_index = target - a_index - 1;\n" <<
+ " if(!(" << comp(first2[expr<uint_>("b_index")],
+ first1[expr<uint_>("a_index")]) << "))\n" <<
+ " start = a_index + 1;\n" <<
+ " else end = a_index;\n" <<
+ "}\n" <<
+ "a_index = start;\n" <<
+ "b_index = target - start;\n" <<
+ "if(b_index < b_count)\n" <<
+ "{\n" <<
+ " " << decl<const value_type>("x") << " = " <<
+ first2[expr<uint_>("b_index")] << ";\n" <<
+ " uint a_start = 0, a_end = a_index, a_mid;\n" <<
+ " uint b_start = 0, b_end = b_index, b_mid;\n" <<
+ " while(a_start<a_end)\n" <<
+ " {\n" <<
+ " a_mid = (a_start + a_end)/2;\n" <<
+ " if(" << comp(first1[expr<uint_>("a_mid")], expr<value_type>("x")) << ")\n" <<
+ " a_start = a_mid+1;\n" <<
+ " else a_end = a_mid;\n" <<
+ " }\n" <<
+ " while(b_start<b_end)\n" <<
+ " {\n" <<
+ " b_mid = (b_start + b_end)/2;\n" <<
+ " if(" << comp(first2[expr<uint_>("b_mid")], expr<value_type>("x")) << ")\n" <<
+ " b_start = b_mid+1;\n" <<
+ " else b_end = b_mid;\n" <<
+ " }\n" <<
+ " uint a_run = a_index - a_start;\n" <<
+ " uint b_run = b_index - b_start;\n" <<
+ " uint x_count = a_run + b_run;\n" <<
+ " uint b_advance = max(x_count / 2, x_count - a_run);\n" <<
+ " b_end = min(b_count, b_start + b_advance + 1);\n" <<
+ " uint temp_start = b_index, temp_end = b_end, temp_mid;" <<
+ " while(temp_start < temp_end)\n" <<
+ " {\n" <<
+ " temp_mid = (temp_start + temp_end + 1)/2;\n" <<
+ " if(" << comp(expr<value_type>("x"), first2[expr<uint_>("temp_mid")]) << ")\n" <<
+ " temp_end = temp_mid-1;\n" <<
+ " else temp_start = temp_mid;\n" <<
+ " }\n" <<
+ " b_run = temp_start - b_start + 1;\n" <<
+ " b_advance = min(b_advance, b_run);\n" <<
+ " uint a_advance = x_count - b_advance;\n" <<
+ " uint star = convert_uint((a_advance == b_advance + 1) " <<
+ "&& (b_advance < b_run));\n" <<
+ " a_index = a_start + a_advance;\n" <<
+ " b_index = target - a_index + star;\n" <<
+ "}\n" <<
+ result_a[expr<uint_>("i")] << " = a_index;\n" <<
+ result_b[expr<uint_>("i")] << " = b_index;\n";
+
+ }
+
+ template<class InputIterator1, class InputIterator2,
+ class OutputIterator1, class Ou