/*============================================================================= Copyright (c) 2011-2019 Bolero MURAKAMI https://github.com/bolero-MURAKAMI/Sprout Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) =============================================================================*/ #ifndef SPROUT_ALGORITHM_FIXED_FILL_N_HPP #define SPROUT_ALGORITHM_FIXED_FILL_N_HPP #include #include #include #include #include #include #include #include #include #include #include namespace sprout { namespace fixed { namespace detail { template inline SPROUT_CONSTEXPR typename std::enable_if< sprout::is_fixed_container::value, typename sprout::fixed::results::algorithm::type >::type fill_n(Container const& cont, Size n, T const& value) { return sprout::fixed::detail::fill_impl( cont, value, sprout::container_indexes::make(), sprout::internal_begin_offset(cont), n ); } template inline SPROUT_CONSTEXPR typename std::enable_if< !sprout::is_fixed_container::value, typename sprout::fixed::results::algorithm::type >::type fill_n(Container const& cont, Size n, T const& value) { return sprout::remake( cont, n, sprout::value_iterator(value, n), sprout::value_iterator(value, 0) ); } } // namespace detail // // fill_n // template inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type fill_n(Container const& cont, Size n, T const& value) { return sprout::fixed::detail::fill_n(cont, n, value); } template inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type fill_n(Size n, T const& value) { return sprout::fixed::fill_n(sprout::pit(), n, value); } } // namespace fixed template< typename Container, typename Size, typename T, typename sprout::enabler_if::value>::type = sprout::enabler > inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type fill_n(Container const& cont, Size n, T const& value) { return sprout::fixed::fill_n(cont, n, value); } template inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type fill_n(Size n, T const& value) { return sprout::fixed::fill_n(n, value); } } // namespace sprout #endif // #ifndef SPROUT_ALGORITHM_FIXED_FILL_N_HPP