diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 034a7beb17424..b9b6856dc3405 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -1168,16 +1168,6 @@ void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA, if (JA.isOffloading(Action::OFK_Cuda)) getToolChain().AddCudaIncludeArgs(Args, CmdArgs); - // Add include directories for SYCL - if (!Args.hasArg(options::OPT_nobuiltininc) && - getToolChain().getTriple().isSYCLDeviceEnvironment()) { - SmallString<128> P(D.ResourceDir); - llvm::sys::path::append(P, "include"); - llvm::sys::path::append(P, "sycl_wrappers"); - CmdArgs.push_back("-internal-isystem"); - CmdArgs.push_back(Args.MakeArgString(P)); - } - // If we are offloading to a target via OpenMP we need to include the // openmp_wrappers folder which contains alternative system headers. if (JA.isDeviceOffloading(Action::OFK_OpenMP) && diff --git a/clang/lib/Headers/CMakeLists.txt b/clang/lib/Headers/CMakeLists.txt index cf6cecaeafc21..392ca2ae391c9 100644 --- a/clang/lib/Headers/CMakeLists.txt +++ b/clang/lib/Headers/CMakeLists.txt @@ -128,12 +128,6 @@ set(ppc_wrapper_files ppc_wrappers/mmintrin.h ) -set(sycl_wrapper_files - sycl_wrappers/algorithm - sycl_wrappers/random - sycl_wrappers/__config -) - set(openmp_wrapper_files openmp_wrappers/math.h openmp_wrappers/cmath @@ -201,12 +195,6 @@ install( DESTINATION ${header_install_dir}/ppc_wrappers COMPONENT clang-resource-headers) -install( - FILES ${sycl_wrapper_files} - COMPONENT clang-resource-headers - PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ - DESTINATION lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION}/include/sycl_wrappers) - install( FILES ${openmp_wrapper_files} DESTINATION ${header_install_dir}/openmp_wrappers diff --git a/clang/lib/Headers/sycl_wrappers/__config b/clang/lib/Headers/sycl_wrappers/__config deleted file mode 100644 index 35670334636b3..0000000000000 --- a/clang/lib/Headers/sycl_wrappers/__config +++ /dev/null @@ -1,36 +0,0 @@ -// -*- C++ -*- -//===--------------------------- __config ---------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP_STD_VER -# if __cplusplus <= 201103L -# define _LIBCPP_STD_VER 11 -# elif __cplusplus <= 201402L -# define _LIBCPP_STD_VER 14 -# elif __cplusplus <= 201703L -# define _LIBCPP_STD_VER 17 -# endif -#endif - -#if _LIBCPP_STD_VER > 11 -# define _LIBCPP_CONSTEXPR_AFTER_CXX11 constexpr -#else -# define _LIBCPP_CONSTEXPR_AFTER_CXX11 -#endif - -#if _LIBCPP_STD_VER > 14 -# define _LIBCPP_CONSTEXPR_AFTER_CXX14 constexpr -#else -# define _LIBCPP_CONSTEXPR_AFTER_CXX14 -#endif - -#if _LIBCPP_STD_VER > 17 -# define _LIBCPP_CONSTEXPR_AFTER_CXX17 constexpr -#else -# define _LIBCPP_CONSTEXPR_AFTER_CXX17 -#endif diff --git a/clang/lib/Headers/sycl_wrappers/algorithm b/clang/lib/Headers/sycl_wrappers/algorithm deleted file mode 100644 index bff60089a903a..0000000000000 --- a/clang/lib/Headers/sycl_wrappers/algorithm +++ /dev/null @@ -1,593 +0,0 @@ -// -*- C++ -*- -//===-------------------------- algorithm ---------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include <__config> -#include -#include - -namespace std { - -template -bool all_of(InputIterator first, InputIterator last, Predicate pred); - -template -bool any_of(InputIterator first, InputIterator last, Predicate pred); - -template -bool none_of(InputIterator first, InputIterator last, Predicate pred); - -template -Function for_each(InputIterator first, InputIterator last, Function f); - -template -InputIterator for_each_n(InputIterator first, Size n, Function f); - -template -InputIterator find(InputIterator first, InputIterator last, const T &value); - -template -InputIterator find_if(InputIterator first, InputIterator last, Predicate pred); - -template -InputIterator find_if_not(InputIterator first, InputIterator last, - Predicate pred); - -template -ForwardIterator1 find_end(ForwardIterator1 first1, ForwardIterator1 last1, - ForwardIterator2 first2, ForwardIterator2 last2); - -template -ForwardIterator1 find_end(ForwardIterator1 first1, ForwardIterator1 last1, - ForwardIterator2 first2, ForwardIterator2 last2, - BinaryPredicate pred); - -template -ForwardIterator1 find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, - ForwardIterator2 first2, ForwardIterator2 last2); - -template -ForwardIterator1 find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, - ForwardIterator2 first2, ForwardIterator2 last2, - BinaryPredicate pred); - -template -ForwardIterator adjacent_find(ForwardIterator first, ForwardIterator last); - -template -ForwardIterator adjacent_find(ForwardIterator first, ForwardIterator last, - BinaryPredicate pred); - -template -typename iterator_traits::difference_type -count(InputIterator first, InputIterator last, const T &value); - -template -typename iterator_traits::difference_type -count_if(InputIterator first, InputIterator last, Predicate pred); - -template -pair -mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); - -template -pair -mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, - InputIterator2 last2); // **C++14** - -template -pair -mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, - BinaryPredicate pred); - -template -pair -mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, - InputIterator2 last2, - BinaryPredicate pred); // **C++14** - -template -bool equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); - -template -bool equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, - InputIterator2 last2); // **C++14** - -template -bool equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, - BinaryPredicate pred); - -template -bool equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, - InputIterator2 last2, - BinaryPredicate pred); // **C++14** - -template -bool is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, - ForwardIterator2 first2); - -template -bool is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, - ForwardIterator2 first2, - ForwardIterator2 last2); // **C++14** - -template -bool is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, - ForwardIterator2 first2, BinaryPredicate pred); - -template -bool is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, - ForwardIterator2 first2, ForwardIterator2 last2, - BinaryPredicate pred); // **C++14** - -template -ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1, - ForwardIterator2 first2, ForwardIterator2 last2); - -template -ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1, - ForwardIterator2 first2, ForwardIterator2 last2, - BinaryPredicate pred); - -template -ForwardIterator search_n(ForwardIterator first, ForwardIterator last, - Size count, const T &value); - -template -ForwardIterator search_n(ForwardIterator first, ForwardIterator last, - Size count, const T &value, BinaryPredicate pred); - -template -OutputIterator copy(InputIterator first, InputIterator last, - OutputIterator result); - -template -OutputIterator copy_if(InputIterator first, InputIterator last, - OutputIterator result, Predicate pred); - -template -OutputIterator copy_n(InputIterator first, Size n, OutputIterator result); - -template -BidirectionalIterator2 copy_backward(BidirectionalIterator1 first, - BidirectionalIterator1 last, - BidirectionalIterator2 result); - -template -ForwardIterator2 swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1, - ForwardIterator2 first2); - -template -void iter_swap(ForwardIterator1 a, ForwardIterator2 b); - -template -OutputIterator transform(InputIterator first, InputIterator last, - OutputIterator result, UnaryOperation op); - -template -OutputIterator transform(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, OutputIterator result, - BinaryOperation binary_op); - -template -void replace(ForwardIterator first, ForwardIterator last, const T &old_value, - const T &new_value); - -template -void replace_if(ForwardIterator first, ForwardIterator last, Predicate pred, - const T &new_value); - -template -OutputIterator replace_copy(InputIterator first, InputIterator last, - OutputIterator result, const T &old_value, - const T &new_value); - -template -OutputIterator replace_copy_if(InputIterator first, InputIterator last, - OutputIterator result, Predicate pred, - const T &new_value); - -template -void fill(ForwardIterator first, ForwardIterator last, const T &value); - -template -OutputIterator fill_n(OutputIterator first, Size n, const T &value); - -template -void generate(ForwardIterator first, ForwardIterator last, Generator gen); - -template -OutputIterator generate_n(OutputIterator first, Size n, Generator gen); - -template -ForwardIterator remove(ForwardIterator first, ForwardIterator last, - const T &value); - -template -ForwardIterator remove_if(ForwardIterator first, ForwardIterator last, - Predicate pred); - -template -OutputIterator remove_copy(InputIterator first, InputIterator last, - OutputIterator result, const T &value); - -template -OutputIterator remove_copy_if(InputIterator first, InputIterator last, - OutputIterator result, Predicate pred); - -template -ForwardIterator unique(ForwardIterator first, ForwardIterator last); - -template -ForwardIterator unique(ForwardIterator first, ForwardIterator last, - BinaryPredicate pred); - -template -OutputIterator unique_copy(InputIterator first, InputIterator last, - OutputIterator result); - -template -OutputIterator unique_copy(InputIterator first, InputIterator last, - OutputIterator result, BinaryPredicate pred); - -template -void reverse(BidirectionalIterator first, BidirectionalIterator last); - -template -OutputIterator reverse_copy(BidirectionalIterator first, - BidirectionalIterator last, OutputIterator result); - -template -ForwardIterator rotate(ForwardIterator first, ForwardIterator middle, - ForwardIterator last); - -template -OutputIterator rotate_copy(ForwardIterator first, ForwardIterator middle, - ForwardIterator last, OutputIterator result); - -template -void random_shuffle( - RandomAccessIterator first, - RandomAccessIterator last); // deprecated in C++14, removed in C++17 - -template -void random_shuffle( - RandomAccessIterator first, RandomAccessIterator last, - RandomNumberGenerator &rand); // deprecated in C++14, removed in C++17 - -template -SampleIterator sample(PopulationIterator first, PopulationIterator last, - SampleIterator out, Distance n, - UniformRandomBitGenerator &&g); - -template -void shuffle(RandomAccessIterator first, RandomAccessIterator last, - UniformRandomNumberGenerator &&g); - -template -bool is_partitioned(InputIterator first, InputIterator last, Predicate pred); - -template -ForwardIterator partition(ForwardIterator first, ForwardIterator last, - Predicate pred); - -template -pair -partition_copy(InputIterator first, InputIterator last, - OutputIterator1 out_true, OutputIterator2 out_false, - Predicate pred); - -template -ForwardIterator stable_partition(ForwardIterator first, ForwardIterator last, - Predicate pred); - -template -ForwardIterator partition_point(ForwardIterator first, ForwardIterator last, - Predicate pred); - -template -bool is_sorted(ForwardIterator first, ForwardIterator last); - -template -bool is_sorted(ForwardIterator first, ForwardIterator last, Compare comp); - -template -ForwardIterator is_sorted_until(ForwardIterator first, ForwardIterator last); - -template -ForwardIterator is_sorted_until(ForwardIterator first, ForwardIterator last, - Compare comp); - -template -void sort(RandomAccessIterator first, RandomAccessIterator last); - -template -void sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); - -template -void stable_sort(RandomAccessIterator first, RandomAccessIterator last); - -template -void stable_sort(RandomAccessIterator first, RandomAccessIterator last, - Compare comp); - -template -void partial_sort(RandomAccessIterator first, RandomAccessIterator middle, - RandomAccessIterator last); - -template -void partial_sort(RandomAccessIterator first, RandomAccessIterator middle, - RandomAccessIterator last, Compare comp); - -template -RandomAccessIterator partial_sort_copy(InputIterator first, InputIterator last, - RandomAccessIterator result_first, - RandomAccessIterator result_last); - -template -RandomAccessIterator partial_sort_copy(InputIterator first, InputIterator last, - RandomAccessIterator result_first, - RandomAccessIterator result_last, - Compare comp); - -template -void nth_element(RandomAccessIterator first, RandomAccessIterator nth, - RandomAccessIterator last); - -template -void nth_element(RandomAccessIterator first, RandomAccessIterator nth, - RandomAccessIterator last, Compare comp); - -template -ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last, - const T &value); - -template -ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last, - const T &value, Compare comp); - -template -ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last, - const T &value); - -template -ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last, - const T &value, Compare comp); - -template -pair -equal_range(ForwardIterator first, ForwardIterator last, const T &value); - -template -pair -equal_range(ForwardIterator first, ForwardIterator last, const T &value, - Compare comp); - -template -bool binary_search(ForwardIterator first, ForwardIterator last, const T &value); - -template -bool binary_search(ForwardIterator first, ForwardIterator last, const T &value, - Compare comp); - -template -OutputIterator merge(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2, - OutputIterator result); - -template -OutputIterator merge(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2, - OutputIterator result, Compare comp); - -template -void inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, - BidirectionalIterator last); - -template -void inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, - BidirectionalIterator last, Compare comp); - -template -bool includes(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2); - -template -bool includes(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2, Compare comp); - -template -OutputIterator set_union(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2, - OutputIterator result); - -template -OutputIterator set_union(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2, - OutputIterator result, Compare comp); - -template -OutputIterator set_intersection(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2, - OutputIterator result); - -template -OutputIterator set_intersection(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2, - OutputIterator result, Compare comp); - -template -OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2, - OutputIterator result); - -template -OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2, - OutputIterator result, Compare comp); - -template -OutputIterator -set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2, - OutputIterator result); - -template -OutputIterator -set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2, - OutputIterator result, Compare comp); - -template -void push_heap(RandomAccessIterator first, RandomAccessIterator last); - -template -void push_heap(RandomAccessIterator first, RandomAccessIterator last, - Compare comp); - -template -void pop_heap(RandomAccessIterator first, RandomAccessIterator last); - -template -void pop_heap(RandomAccessIterator first, RandomAccessIterator last, - Compare comp); - -template -void make_heap(RandomAccessIterator first, RandomAccessIterator last); - -template -void make_heap(RandomAccessIterator first, RandomAccessIterator last, - Compare comp); - -template -void sort_heap(RandomAccessIterator first, RandomAccessIterator last); - -template -void sort_heap(RandomAccessIterator first, RandomAccessIterator last, - Compare comp); - -template -bool is_heap(RandomAccessIterator first, RandomAccessIterator last); - -template -bool is_heap(RandomAccessIterator first, RandomAccessIterator last, - Compare comp); - -template -RandomAccessIterator is_heap_until(RandomAccessIterator first, - RandomAccessIterator last); - -template -RandomAccessIterator is_heap_until(RandomAccessIterator first, - RandomAccessIterator last, Compare comp); - -template -_LIBCPP_CONSTEXPR_AFTER_CXX11 ForwardIterator min_element(ForwardIterator first, - ForwardIterator last); - -template -_LIBCPP_CONSTEXPR_AFTER_CXX11 ForwardIterator min_element(ForwardIterator first, - ForwardIterator last, - Compare comp); - -template -_LIBCPP_CONSTEXPR_AFTER_CXX11 const T &min(const T &a, const T &b); - -template -_LIBCPP_CONSTEXPR_AFTER_CXX11 const T &min(const T &a, const T &b, - Compare comp); - -template _LIBCPP_CONSTEXPR_AFTER_CXX11 T min(initializer_list t); - -template -_LIBCPP_CONSTEXPR_AFTER_CXX11 T min(initializer_list t, Compare comp); - -#if _LIBCPP_STD_VER > 14 -template -const T constexpr &clamp(const T &v, const T &lo, const T &hi); - -template -const T constexpr &clamp(const T &v, const T &lo, const T &hi, Compare comp); -#endif - -template -_LIBCPP_CONSTEXPR_AFTER_CXX11 ForwardIterator max_element(ForwardIterator first, - ForwardIterator last); - -template -_LIBCPP_CONSTEXPR_AFTER_CXX11 ForwardIterator max_element(ForwardIterator first, - ForwardIterator last, - Compare comp); - -template -_LIBCPP_CONSTEXPR_AFTER_CXX11 const T &max(const T &a, const T &b); - -template -_LIBCPP_CONSTEXPR_AFTER_CXX11 const T &max(const T &a, const T &b, - Compare comp); - -template _LIBCPP_CONSTEXPR_AFTER_CXX11 T max(initializer_list t); - -template -_LIBCPP_CONSTEXPR_AFTER_CXX11 T max(initializer_list t, Compare comp); - -template -_LIBCPP_CONSTEXPR_AFTER_CXX11 pair -minmax_element(ForwardIterator first, ForwardIterator last); - -template -pair _LIBCPP_CONSTEXPR_AFTER_CXX11 -minmax_element(ForwardIterator first, ForwardIterator last, Compare comp); - -template -_LIBCPP_CONSTEXPR_AFTER_CXX11 pair minmax(const T &a, - const T &b); - -template -_LIBCPP_CONSTEXPR_AFTER_CXX11 pair -minmax(const T &a, const T &b, Compare comp); - -template -_LIBCPP_CONSTEXPR_AFTER_CXX11 pair minmax(initializer_list t); - -template -_LIBCPP_CONSTEXPR_AFTER_CXX11 pair minmax(initializer_list t, - Compare comp); - -template -bool lexicographical_compare(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2); - -template -bool lexicographical_compare(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2, - Compare comp); - -template -bool next_permutation(BidirectionalIterator first, BidirectionalIterator last); - -template -bool next_permutation(BidirectionalIterator first, BidirectionalIterator last, - Compare comp); - -template -bool prev_permutation(BidirectionalIterator first, BidirectionalIterator last); - -template -bool prev_permutation(BidirectionalIterator first, BidirectionalIterator last, - Compare comp); - -} // namespace std diff --git a/clang/lib/Headers/sycl_wrappers/random b/clang/lib/Headers/sycl_wrappers/random deleted file mode 100644 index 797a36693e180..0000000000000 --- a/clang/lib/Headers/sycl_wrappers/random +++ /dev/null @@ -1,1458 +0,0 @@ -// -*- C++ -*- -//===--------------------------- random -----------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include -#include -#include -#include - -namespace std { - -// Engines - -template -class linear_congruential_engine { -public: - // types - typedef UIntType result_type; - - // engine characteristics - static constexpr result_type multiplier = a; - static constexpr result_type increment = c; - static constexpr result_type modulus = m; - static constexpr result_type min() { return c == 0u ? 1u : 0u; } - static constexpr result_type max() { return m - 1u; } - static constexpr result_type default_seed = 1u; - - // constructors and seeding functions - explicit linear_congruential_engine(result_type s = default_seed); - template explicit linear_congruential_engine(Sseq &q); - void seed(result_type s = default_seed); - template void seed(Sseq &q); - - // generating functions - result_type operator()(); - void discard(unsigned long long z); -}; - -template -bool operator==(const linear_congruential_engine &x, - const linear_congruential_engine &y); - -template -bool operator!=(const linear_congruential_engine &x, - const linear_congruential_engine &y); - -template -basic_ostream & -operator<<(basic_ostream &os, - const linear_congruential_engine &x); - -template -basic_istream & -operator>>(basic_istream &is, - linear_congruential_engine &x); - -template -class mersenne_twister_engine { -public: - // types - typedef UIntType result_type; - - // engine characteristics - static constexpr size_t word_size = w; - static constexpr size_t state_size = n; - static constexpr size_t shift_size = m; - static constexpr size_t mask_bits = r; - static constexpr result_type xor_mask = a; - static constexpr size_t tempering_u = u; - static constexpr result_type tempering_d = d; - static constexpr size_t tempering_s = s; - static constexpr result_type tempering_b = b; - static constexpr size_t tempering_t = t; - static constexpr result_type tempering_c = c; - static constexpr size_t tempering_l = l; - static constexpr result_type initialization_multiplier = f; - static constexpr result_type min() { return 0; } - static constexpr result_type max() { return 2 ^ w - 1; } - static constexpr result_type default_seed = 5489u; - - // constructors and seeding functions - explicit mersenne_twister_engine(result_type value = default_seed); - template explicit mersenne_twister_engine(Sseq &q); - void seed(result_type value = default_seed); - template void seed(Sseq &q); - - // generating functions - result_type operator()(); - void discard(unsigned long long z); -}; - -template -bool operator==(const mersenne_twister_engine &x, - const mersenne_twister_engine &y); - -template -bool operator!=(const mersenne_twister_engine &x, - const mersenne_twister_engine &y); - -template -basic_ostream & -operator<<(basic_ostream &os, - const mersenne_twister_engine &x); - -template -basic_istream & -operator>>(basic_istream &is, - mersenne_twister_engine &x); - -template -class subtract_with_carry_engine { -public: - // types - typedef UIntType result_type; - - // engine characteristics - static constexpr size_t word_size = w; - static constexpr size_t short_lag = s; - static constexpr size_t long_lag = r; - static constexpr result_type min(); - static constexpr result_type max(); - static constexpr result_type default_seed = 19780503u; - - // constructors and seeding functions - explicit subtract_with_carry_engine(result_type value = default_seed); - template explicit subtract_with_carry_engine(Sseq &q); - void seed(result_type value = default_seed); - template void seed(Sseq &q); - - // generating functions - result_type operator()(); - void discard(unsigned long long z); -}; - -template -bool operator==(const subtract_with_carry_engine &x, - const subtract_with_carry_engine &y); - -template -bool operator!=(const subtract_with_carry_engine &x, - const subtract_with_carry_engine &y); - -template -basic_ostream & -operator<<(basic_ostream &os, - const subtract_with_carry_engine &x); - -template -basic_istream & -operator>>(basic_istream &is, - subtract_with_carry_engine &x); - -template class discard_block_engine { -public: - // types - typedef typename Engine::result_type result_type; - - // engine characteristics - static constexpr size_t block_size = p; - static constexpr size_t used_block = r; - static constexpr result_type min() { return Engine::min(); } - static constexpr result_type max() { return Engine::max(); } - - // constructors and seeding functions - discard_block_engine(); - explicit discard_block_engine(const Engine &e); - explicit discard_block_engine(Engine &&e); - explicit discard_block_engine(result_type s); - template explicit discard_block_engine(Sseq &q); - void seed(); - void seed(result_type s); - template void seed(Sseq &q); - - // generating functions - result_type operator()(); - void discard(unsigned long long z); - - // property functions - const Engine &base() const noexcept; -}; - -template -bool operator==(const discard_block_engine &x, - const discard_block_engine &y); - -template -bool operator!=(const discard_block_engine &x, - const discard_block_engine &y); - -template -basic_ostream & -operator<<(basic_ostream &os, - const discard_block_engine &x); - -template -basic_istream &operator>>(basic_istream &is, - discard_block_engine &x); - -template -class independent_bits_engine { -public: - // types - typedef UIntType result_type; - - // engine characteristics - static constexpr result_type min() { return 0; } - static constexpr result_type max() { return 2 ^ w - 1; } - - // constructors and seeding functions - independent_bits_engine(); - explicit independent_bits_engine(const Engine &e); - explicit independent_bits_engine(Engine &&e); - explicit independent_bits_engine(result_type s); - template explicit independent_bits_engine(Sseq &q); - void seed(); - void seed(result_type s); - template void seed(Sseq &q); - - // generating functions - result_type operator()(); - void discard(unsigned long long z); - - // property functions - const Engine &base() const noexcept; -}; - -template -bool operator==(const independent_bits_engine &x, - const independent_bits_engine &y); - -template -bool operator!=(const independent_bits_engine &x, - const independent_bits_engine &y); - -template -basic_ostream & -operator<<(basic_ostream &os, - const independent_bits_engine &x); - -template -basic_istream & -operator>>(basic_istream &is, - independent_bits_engine &x); - -template class shuffle_order_engine { -public: - // types - typedef typename Engine::result_type result_type; - - // engine characteristics - static constexpr size_t table_size = k; - static constexpr result_type min() { return Engine::min; } - static constexpr result_type max() { return Engine::max; } - - // constructors and seeding functions - shuffle_order_engine(); - explicit shuffle_order_engine(const Engine &e); - explicit shuffle_order_engine(Engine &&e); - explicit shuffle_order_engine(result_type s); - template explicit shuffle_order_engine(Sseq &q); - void seed(); - void seed(result_type s); - template void seed(Sseq &q); - - // generating functions - result_type operator()(); - void discard(unsigned long long z); - - // property functions - const Engine &base() const noexcept; -}; - -template -bool operator==(const shuffle_order_engine &x, - const shuffle_order_engine &y); - -template -bool operator!=(const shuffle_order_engine &x, - const shuffle_order_engine &y); - -template -basic_ostream & -operator<<(basic_ostream &os, - const shuffle_order_engine &x); - -template -basic_istream &operator>>(basic_istream &is, - shuffle_order_engine &x); - -typedef linear_congruential_engine - minstd_rand0; -typedef linear_congruential_engine - minstd_rand; -typedef mersenne_twister_engine - mt19937; -typedef mersenne_twister_engine< - uint_fast64_t, 64, 312, 156, 31, 0xb5026f5aa96619e9, 29, 0x5555555555555555, - 17, 0x71d67fffeda60000, 37, 0xfff7eee000000000, 43, 6364136223846793005> - mt19937_64; -typedef subtract_with_carry_engine ranlux24_base; -typedef subtract_with_carry_engine ranlux48_base; -typedef discard_block_engine ranlux24; -typedef discard_block_engine ranlux48; -typedef shuffle_order_engine knuth_b; -typedef minstd_rand default_random_engine; - -// Generators - -class random_device { -public: - // types - typedef unsigned int result_type; - - // generator characteristics - static constexpr result_type min() { - return numeric_limits::min(); - } - static constexpr result_type max() { - return numeric_limits::max(); - } - - // constructors - explicit random_device(const string &token = "/dev/urandom"); - - // generating functions - result_type operator()(); - - // property functions - double entropy() const noexcept; - - // no copy functions - random_device(const random_device &) = delete; - void operator=(const random_device &) = delete; -}; - -// Utilities - -class seed_seq { -public: - // types - typedef uint_least32_t result_type; - - // constructors - seed_seq(); - template seed_seq(initializer_list il); - template - seed_seq(InputIterator begin, InputIterator end); - - // generating functions - template - void generate(RandomAccessIterator begin, RandomAccessIterator end); - - // property functions - size_t size() const; - template void param(OutputIterator dest) const; - - // no copy functions - seed_seq(const seed_seq &) = delete; - void operator=(const seed_seq &) = delete; -}; - -template -RealType generate_canonical(URNG &g); - -// Distributions - -template class uniform_int_distribution { -public: - // types - typedef IntType result_type; - - class param_type { - public: - typedef uniform_int_distribution distribution_type; - - explicit param_type(IntType a = 0, - IntType b = numeric_limits::max()); - - result_type a() const; - result_type b() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructors and reset functions - explicit uniform_int_distribution(IntType a = 0, - IntType b = numeric_limits::max()); - explicit uniform_int_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - result_type a() const; - result_type b() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const uniform_int_distribution &x, - const uniform_int_distribution &y); - friend bool operator!=(const uniform_int_distribution &x, - const uniform_int_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, - const uniform_int_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, uniform_int_distribution &x); -}; - -template class uniform_real_distribution { -public: - // types - typedef RealType result_type; - - class param_type { - public: - typedef uniform_real_distribution distribution_type; - - explicit param_type(RealType a = 0, RealType b = 1); - - result_type a() const; - result_type b() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructors and reset functions - explicit uniform_real_distribution(RealType a = 0.0, RealType b = 1.0); - explicit uniform_real_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - result_type a() const; - result_type b() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const uniform_real_distribution &x, - const uniform_real_distribution &y); - friend bool operator!=(const uniform_real_distribution &x, - const uniform_real_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, - const uniform_real_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, uniform_real_distribution &x); -}; - -class bernoulli_distribution { -public: - // types - typedef bool result_type; - - class param_type { - public: - typedef bernoulli_distribution distribution_type; - - explicit param_type(double p = 0.5); - - double p() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructors and reset functions - explicit bernoulli_distribution(double p = 0.5); - explicit bernoulli_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - double p() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const bernoulli_distribution &x, - const bernoulli_distribution &y); - friend bool operator!=(const bernoulli_distribution &x, - const bernoulli_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, const bernoulli_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, bernoulli_distribution &x); -}; - -template class binomial_distribution { -public: - // types - typedef IntType result_type; - - class param_type { - public: - typedef binomial_distribution distribution_type; - - explicit param_type(IntType t = 1, double p = 0.5); - - IntType t() const; - double p() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructors and reset functions - explicit binomial_distribution(IntType t = 1, double p = 0.5); - explicit binomial_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - IntType t() const; - double p() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const binomial_distribution &x, - const binomial_distribution &y); - friend bool operator!=(const binomial_distribution &x, - const binomial_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, const binomial_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, binomial_distribution &x); -}; - -template class geometric_distribution { -public: - // types - typedef IntType result_type; - - class param_type { - public: - typedef geometric_distribution distribution_type; - - explicit param_type(double p = 0.5); - - double p() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructors and reset functions - explicit geometric_distribution(double p = 0.5); - explicit geometric_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - double p() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const geometric_distribution &x, - const geometric_distribution &y); - friend bool operator!=(const geometric_distribution &x, - const geometric_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, const geometric_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, geometric_distribution &x); -}; - -template class negative_binomial_distribution { -public: - // types - typedef IntType result_type; - - class param_type { - public: - typedef negative_binomial_distribution distribution_type; - - explicit param_type(result_type k = 1, double p = 0.5); - - result_type k() const; - double p() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructor and reset functions - explicit negative_binomial_distribution(result_type k = 1, double p = 0.5); - explicit negative_binomial_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - result_type k() const; - double p() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const negative_binomial_distribution &x, - const negative_binomial_distribution &y); - friend bool operator!=(const negative_binomial_distribution &x, - const negative_binomial_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, - const negative_binomial_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, - negative_binomial_distribution &x); -}; - -template class poisson_distribution { -public: - // types - typedef IntType result_type; - - class param_type { - public: - typedef poisson_distribution distribution_type; - - explicit param_type(double mean = 1.0); - - double mean() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructors and reset functions - explicit poisson_distribution(double mean = 1.0); - explicit poisson_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - double mean() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const poisson_distribution &x, - const poisson_distribution &y); - friend bool operator!=(const poisson_distribution &x, - const poisson_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, const poisson_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, poisson_distribution &x); -}; - -template class exponential_distribution { -public: - // types - typedef RealType result_type; - - class param_type { - public: - typedef exponential_distribution distribution_type; - - explicit param_type(result_type lambda = 1.0); - - result_type lambda() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructors and reset functions - explicit exponential_distribution(result_type lambda = 1.0); - explicit exponential_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - result_type lambda() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const exponential_distribution &x, - const exponential_distribution &y); - friend bool operator!=(const exponential_distribution &x, - const exponential_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, - const exponential_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, exponential_distribution &x); -}; - -template class gamma_distribution { -public: - // types - typedef RealType result_type; - - class param_type { - public: - typedef gamma_distribution distribution_type; - - explicit param_type(result_type alpha = 1, result_type beta = 1); - - result_type alpha() const; - result_type beta() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructors and reset functions - explicit gamma_distribution(result_type alpha = 1, result_type beta = 1); - explicit gamma_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - result_type alpha() const; - result_type beta() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const gamma_distribution &x, - const gamma_distribution &y); - friend bool operator!=(const gamma_distribution &x, - const gamma_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, const gamma_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, gamma_distribution &x); -}; - -template class weibull_distribution { -public: - // types - typedef RealType result_type; - - class param_type { - public: - typedef weibull_distribution distribution_type; - - explicit param_type(result_type alpha = 1, result_type beta = 1); - - result_type a() const; - result_type b() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructor and reset functions - explicit weibull_distribution(result_type a = 1, result_type b = 1); - explicit weibull_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - result_type a() const; - result_type b() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const weibull_distribution &x, - const weibull_distribution &y); - friend bool operator!=(const weibull_distribution &x, - const weibull_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, const weibull_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, weibull_distribution &x); -}; - -template class extreme_value_distribution { -public: - // types - typedef RealType result_type; - - class param_type { - public: - typedef extreme_value_distribution distribution_type; - - explicit param_type(result_type a = 0, result_type b = 1); - - result_type a() const; - result_type b() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructor and reset functions - explicit extreme_value_distribution(result_type a = 0, result_type b = 1); - explicit extreme_value_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - result_type a() const; - result_type b() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const extreme_value_distribution &x, - const extreme_value_distribution &y); - friend bool operator!=(const extreme_value_distribution &x, - const extreme_value_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, - const extreme_value_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, extreme_value_distribution &x); -}; - -template class normal_distribution { -public: - // types - typedef RealType result_type; - - class param_type { - public: - typedef normal_distribution distribution_type; - - explicit param_type(result_type mean = 0, result_type stddev = 1); - - result_type mean() const; - result_type stddev() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructors and reset functions - explicit normal_distribution(result_type mean = 0, result_type stddev = 1); - explicit normal_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - result_type mean() const; - result_type stddev() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const normal_distribution &x, - const normal_distribution &y); - friend bool operator!=(const normal_distribution &x, - const normal_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, const normal_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, normal_distribution &x); -}; - -template class lognormal_distribution { -public: - // types - typedef RealType result_type; - - class param_type { - public: - typedef lognormal_distribution distribution_type; - - explicit param_type(result_type m = 0, result_type s = 1); - - result_type m() const; - result_type s() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructor and reset functions - explicit lognormal_distribution(result_type m = 0, result_type s = 1); - explicit lognormal_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - result_type m() const; - result_type s() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const lognormal_distribution &x, - const lognormal_distribution &y); - friend bool operator!=(const lognormal_distribution &x, - const lognormal_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, const lognormal_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, lognormal_distribution &x); -}; - -template class chi_squared_distribution { -public: - // types - typedef RealType result_type; - - class param_type { - public: - typedef chi_squared_distribution distribution_type; - - explicit param_type(result_type n = 1); - - result_type n() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructor and reset functions - explicit chi_squared_distribution(result_type n = 1); - explicit chi_squared_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - result_type n() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const chi_squared_distribution &x, - const chi_squared_distribution &y); - friend bool operator!=(const chi_squared_distribution &x, - const chi_squared_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, - const chi_squared_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, chi_squared_distribution &x); -}; - -template class cauchy_distribution { -public: - // types - typedef RealType result_type; - - class param_type { - public: - typedef cauchy_distribution distribution_type; - - explicit param_type(result_type a = 0, result_type b = 1); - - result_type a() const; - result_type b() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructor and reset functions - explicit cauchy_distribution(result_type a = 0, result_type b = 1); - explicit cauchy_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - result_type a() const; - result_type b() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const cauchy_distribution &x, - const cauchy_distribution &y); - friend bool operator!=(const cauchy_distribution &x, - const cauchy_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, const cauchy_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, cauchy_distribution &x); -}; - -template class fisher_f_distribution { -public: - // types - typedef RealType result_type; - - class param_type { - public: - typedef fisher_f_distribution distribution_type; - - explicit param_type(result_type m = 1, result_type n = 1); - - result_type m() const; - result_type n() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructor and reset functions - explicit fisher_f_distribution(result_type m = 1, result_type n = 1); - explicit fisher_f_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - result_type m() const; - result_type n() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const fisher_f_distribution &x, - const fisher_f_distribution &y); - friend bool operator!=(const fisher_f_distribution &x, - const fisher_f_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, const fisher_f_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, fisher_f_distribution &x); -}; - -template class student_t_distribution { -public: - // types - typedef RealType result_type; - - class param_type { - public: - typedef student_t_distribution distribution_type; - - explicit param_type(result_type n = 1); - - result_type n() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructor and reset functions - explicit student_t_distribution(result_type n = 1); - explicit student_t_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - result_type n() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const student_t_distribution &x, - const student_t_distribution &y); - friend bool operator!=(const student_t_distribution &x, - const student_t_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, const student_t_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, student_t_distribution &x); -}; - -template class discrete_distribution { -public: - // types - typedef IntType result_type; - - class param_type { - public: - typedef discrete_distribution distribution_type; - - param_type(); - template - param_type(InputIterator firstW, InputIterator lastW); - param_type(initializer_list wl); - template - param_type(size_t nw, double xmin, double xmax, UnaryOperation fw); - - vector probabilities() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructor and reset functions - discrete_distribution(); - template - discrete_distribution(InputIterator firstW, InputIterator lastW); - discrete_distribution(initializer_list wl); - template - discrete_distribution(size_t nw, double xmin, double xmax, UnaryOperation fw); - explicit discrete_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - vector probabilities() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const discrete_distribution &x, - const discrete_distribution &y); - friend bool operator!=(const discrete_distribution &x, - const discrete_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, const discrete_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, discrete_distribution &x); -}; - -template class piecewise_constant_distribution { - // types - typedef RealType result_type; - - class param_type { - public: - typedef piecewise_constant_distribution distribution_type; - - param_type(); - template - param_type(InputIteratorB firstB, InputIteratorB lastB, - InputIteratorW firstW); - template - param_type(initializer_list bl, UnaryOperation fw); - template - param_type(size_t nw, result_type xmin, result_type xmax, - UnaryOperation fw); - - vector intervals() const; - vector densities() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructor and reset functions - piecewise_constant_distribution(); - template - piecewise_constant_distribution(InputIteratorB firstB, InputIteratorB lastB, - InputIteratorW firstW); - template - piecewise_constant_distribution(initializer_list bl, - UnaryOperation fw); - template - piecewise_constant_distribution(size_t nw, result_type xmin, result_type xmax, - UnaryOperation fw); - explicit piecewise_constant_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - vector intervals() const; - vector densities() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const piecewise_constant_distribution &x, - const piecewise_constant_distribution &y); - friend bool operator!=(const piecewise_constant_distribution &x, - const piecewise_constant_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, - const piecewise_constant_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, - piecewise_constant_distribution &x); -}; - -template class piecewise_linear_distribution { - // types - typedef RealType result_type; - - class param_type { - public: - typedef piecewise_linear_distribution distribution_type; - - param_type(); - template - param_type(InputIteratorB firstB, InputIteratorB lastB, - InputIteratorW firstW); - template - param_type(initializer_list bl, UnaryOperation fw); - template - param_type(size_t nw, result_type xmin, result_type xmax, - UnaryOperation fw); - - vector intervals() const; - vector densities() const; - - friend bool operator==(const param_type &x, const param_type &y); - friend bool operator!=(const param_type &x, const param_type &y); - }; - - // constructor and reset functions - piecewise_linear_distribution(); - template - piecewise_linear_distribution(InputIteratorB firstB, InputIteratorB lastB, - InputIteratorW firstW); - - template - piecewise_linear_distribution(initializer_list bl, - UnaryOperation fw); - - template - piecewise_linear_distribution(size_t nw, result_type xmin, result_type xmax, - UnaryOperation fw); - - explicit piecewise_linear_distribution(const param_type &parm); - void reset(); - - // generating functions - template result_type operator()(URNG &g); - template result_type operator()(URNG &g, const param_type &parm); - - // property functions - vector intervals() const; - vector densities() const; - - param_type param() const; - void param(const param_type &parm); - - result_type min() const; - result_type max() const; - - friend bool operator==(const piecewise_linear_distribution &x, - const piecewise_linear_distribution &y); - friend bool operator!=(const piecewise_linear_distribution &x, - const piecewise_linear_distribution &y); - - template - friend basic_ostream & - operator<<(basic_ostream &os, - const piecewise_linear_distribution &x); - - template - friend basic_istream & - operator>>(basic_istream &is, - piecewise_linear_distribution &x); -}; - -} // namespace std