// SPDX-FileCopyrightText: Copyright (c) 2008-2013, NVIDIA Corporation. All rights reserved. // SPDX-License-Identifier: Apache-2.0 /*! \file generate.h * \brief Fills a range with values "generated" from a function of no arguments */ #pragma once #include #if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC) # pragma GCC system_header #elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG) # pragma clang system_header #elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC) # pragma system_header #endif // no system header #include THRUST_NAMESPACE_BEGIN /*! \addtogroup transformations * \{ */ /*! \p generate assigns the result of invoking \p gen, a function object that takes no arguments, * to each element in the range [first,last). * * The algorithm's execution is parallelized as determined by \p exec. * * \param exec The execution policy to use for parallelization. * \param first The first element in the range of interest. * \param last The last element in the range of interest. * \param gen A function argument, taking no parameters, used to generate values to assign to * elements in the range [first,last). * * \tparam DerivedPolicy The name of the derived execution policy. * \tparam ForwardIterator is a model of Forward * Iterator, and \p ForwardIterator is mutable. * \tparam Generator A nullary function with a return type convertible to \p ForwardIterator's \c value_type. * * The following code snippet demonstrates how to fill a \c host_vector with random numbers, * using the standard C library function \c rand using the \p thrust::host execution policy for parallelization: * * \code * #include * #include * #include * #include * ... * thrust::host_vector v(10); * srand(13); * thrust::generate(thrust::host, v.begin(), v.end(), rand); * * // the elements of v are now pseudo-random numbers * \endcode * * \see generate_n * \see https://en.cppreference.com/w/cpp/algorithm/generate * * \verbatim embed:rst:leading-asterisk * .. versionadded:: 2.2.0 * \endverbatim */ template _CCCL_HOST_DEVICE void generate(const thrust::detail::execution_policy_base& exec, ForwardIterator first, ForwardIterator last, Generator gen); /*! \p generate assigns the result of invoking \p gen, a function object that takes no arguments, * to each element in the range [first,last). * * \param first The first element in the range of interest. * \param last The last element in the range of interest. * \param gen A function argument, taking no parameters, used to generate values to assign to * elements in the range [first,last). * * \tparam ForwardIterator is a model of Forward * Iterator, and \p ForwardIterator is mutable. * \tparam Generator A nullary function with a return type convertible to \p ForwardIterator's \c value_type. * * The following code snippet demonstrates how to fill a \c host_vector with random numbers, * using the standard C library function \c rand. * * \code * #include * #include * #include * #include * ... * thrust::host_vector v(10); * srand(13); * thrust::generate(v.begin(), v.end(), rand); * * // the elements of v are now pseudo-random numbers * \endcode * * \see generate_n * \see https://en.cppreference.com/w/cpp/algorithm/generate * * \verbatim embed:rst:leading-asterisk * .. versionadded:: 2.2.0 * \endverbatim */ template void generate(ForwardIterator first, ForwardIterator last, Generator gen); /*! \p generate_n assigns the result of invoking \p gen, a function object that takes no arguments, * to each element in the range [first,first + n). The return value is first + n. * * The algorithm's execution is parallelized as determined by \p exec. * * \param exec The execution policy to use for parallelization. * \param first The first element in the range of interest. * \param n The size of the range of interest. * \param gen A function argument, taking no parameters, used to generate values to assign to * elements in the range [first,first + n). * * \tparam DerivedPolicy The name of the derived execution policy. * \tparam OutputIterator is a model of Output * Iterator. \tparam Size is an integral type (either signed or unsigned). * \tparam Generator A nullary function with a return type convertible to \p ForwardIterator's \c value_type. * * The following code snippet demonstrates how to fill a \c host_vector with random numbers, * using the standard C library function \c rand using the \p thrust::host execution policy for parallelization: * * \code * #include * #include * #include * #include * ... * thrust::host_vector v(10); * srand(13); * thrust::generate_n(thrust::host, v.begin(), 10, rand); * * // the elements of v are now pseudo-random numbers * \endcode * * \see generate * \see https://en.cppreference.com/w/cpp/algorithm/generate * * \verbatim embed:rst:leading-asterisk * .. versionadded:: 2.2.0 * \endverbatim */ template _CCCL_HOST_DEVICE OutputIterator generate_n( const thrust::detail::execution_policy_base& exec, OutputIterator first, Size n, Generator gen); /*! \p generate_n assigns the result of invoking \p gen, a function object that takes no arguments, * to each element in the range [first,first + n). The return value is first + n. * * \param first The first element in the range of interest. * \param n The size of the range of interest. * \param gen A function argument, taking no parameters, used to generate values to assign to * elements in the range [first,first + n). * * \tparam OutputIterator is a model of Output * Iterator. \tparam Size is an integral type (either signed or unsigned). * \tparam Generator A nullary function with a return type convertible to \p ForwardIterator's \c value_type. * * The following code snippet demonstrates how to fill a \c host_vector with random numbers, * using the standard C library function \c rand. * * \code * #include * #include * #include * ... * thrust::host_vector v(10); * srand(13); * thrust::generate_n(v.begin(), 10, rand); * * // the elements of v are now pseudo-random numbers * \endcode * * \see generate * \see https://en.cppreference.com/w/cpp/algorithm/generate * * \verbatim embed:rst:leading-asterisk * .. versionadded:: 2.2.0 * \endverbatim */ template OutputIterator generate_n(OutputIterator first, Size n, Generator gen); /*! \} // end transformations */ THRUST_NAMESPACE_END #include