Tatooine
Classes | Namespaces | Concepts | Functions | Variables
for_loop.h File Reference

Go to the source code of this file.

Classes

struct  tatooine::detail::for_loop::for_loop_impl< Int, N, I, ParallelIndex >
 
struct  tatooine::detail::for_loop::for_loop_impl< Int, N, 1, ParallelIndex >
 Last nesting of nested for loops, I is 1. More...
 
struct  tatooine::detail::for_loop::for_loop_impl< Int, N, I, I >
 
struct  tatooine::detail::for_loop::for_loop_impl< Int, N, 1, 1 >
 Last nesting of nested for loops, I is 1 and also reached parallel state. More...
 

Namespaces

namespace  tatooine
 
namespace  tatooine::detail
 
namespace  tatooine::detail::for_loop
 

Concepts

concept  tatooine::for_loop_range_iteration
 
concept  tatooine::for_loop_nested_index_iteration
 

Functions

auto tatooine::for_loop_num_parallel_threads ()
 
template<typename T >
auto tatooine::create_aligned_data_for_parallel ()
 
template<std::size_t ParallelIndex, typename Int , Int... IndexSequence, integral... Ranges, invocable< decltype(((void) IndexSequence, Int{}))... > Iteration>
constexpr auto tatooine::detail::for_loop::for_loop (Iteration &&iteration, std::integer_sequence< Int, IndexSequence... >, std::pair< Ranges, Ranges > const &... ranges)
 
template<typename Int = std::size_t, typename Iteration , integral... Ranges>
constexpr auto tatooine::for_loop (Iteration &&iteration, execution_policy::sequential_t, Ranges(&&... ranges)[2]) -> void
 Use this function for creating a sequential nested loop. More...
 
template<typename Int = std::size_t, typename Iteration , integral... Ranges>
constexpr auto tatooine::for_loop (Iteration &&iteration, execution_policy::sequential_t, std::pair< Ranges, Ranges > const &... ranges) -> void
 Use this function for creating a sequential nested loop. More...
 
template<typename Int = std::size_t, typename Iteration , integral... Ends>
constexpr auto tatooine::for_loop (Iteration &&iteration, execution_policy::sequential_t, Ends const ... ends) -> void
 Use this function for creating a sequential nested loop. More...
 
template<typename Int = std::size_t, typename Iteration , integral... Ranges>
requires parallel_for_loop_support
constexpr auto tatooine::for_loop (Iteration &&iteration, execution_policy::parallel_t, Ranges(&&... ranges)[2]) -> void
 Use this function for creating a parallel nested loop. More...
 
template<typename Int = std::size_t, typename Iteration , integral... Ranges>
requires parallel_for_loop_support
constexpr auto tatooine::for_loop (Iteration &&iteration, execution_policy::parallel_t, std::pair< Ranges, Ranges > const &... ranges) -> void
 Use this function for creating a parallel nested loop. More...
 
template<typename Int = std::size_t, typename Iteration , integral... Ends>
requires parallel_for_loop_support
constexpr auto tatooine::for_loop (Iteration &&iteration, execution_policy::parallel_t, Ends const ... ends) -> void
 Use this function for creating a parallel nested loop. More...
 
template<typename Int = std::size_t, typename Iteration , integral... Ranges>
constexpr auto tatooine::for_loop (Iteration &&iteration, Ranges(&&... ranges)[2]) -> void
 Use this function for creating a sequential nested loop. More...
 
template<typename Int = std::size_t, typename Iteration , integral... Ranges>
constexpr auto tatooine::for_loop (Iteration &&iteration, std::pair< Ranges, Ranges > const &... ranges) -> void
 Use this function for creating a sequential nested loop. More...
 
template<typename Int = std::size_t, typename Iteration , integral... Ends>
constexpr auto tatooine::for_loop (Iteration &&iteration, Ends const ... ends) -> void
 Use this function for creating a sequential nested loop. More...
 
template<typename Iteration , integral Int, std::size_t N>
auto tatooine::for_loop_unpacked (Iteration &&iteration, execution_policy_tag auto policy, std::array< Int, N > const &sizes)
 
template<typename Iteration , integral Int, std::size_t N>
auto tatooine::for_loop_unpacked (Iteration &&iteration, std::array< Int, N > const &sizes)
 
template<typename Int = std::size_t, integral... Ends>
constexpr auto tatooine::chunked_for_loop (invocable< decltype(((void) std::declval< Ends >(), std::declval< Int >()))... > auto &&iteration, execution_policy_tag auto policy, integral auto const chunk_size, Ends const ... ends) -> void
 
template<typename Int = std::size_t, typename Iteration , integral... Ends>
requires invocable<Iteration, decltype((std::declval<Ends>(), std::declval<Int>()))...>
constexpr auto tatooine::chunked_for_loop (Iteration &&iteration, integral auto const chunk_size, Ends const ... ends) -> void
 
template<integral_pair_range IntPairRange, for_loop_nested_index_iteration< std::vector< common_type< typename std::ranges::range_value_t< IntPairRange >::first_type, typename std::ranges::range_value_t< IntPairRange >::second_type > > > Iteration>
auto tatooine::for_loop (Iteration &&iteration, IntPairRange const &ranges, execution_policy::sequential_t)
 
template<integral_pair_range IntPairRange, for_loop_nested_index_iteration< std::vector< common_type< typename std::ranges::range_value_t< IntPairRange >::first_type, typename std::ranges::range_value_t< IntPairRange >::second_type > > > Iteration>
auto tatooine::for_loop (Iteration &&iteration, IntPairRange const &ranges, execution_policy_tag auto policy)
 
template<integral_pair_range IntPairRange, for_loop_nested_index_iteration< std::vector< common_type< typename std::ranges::range_value_t< IntPairRange >::first_type, typename std::ranges::range_value_t< IntPairRange >::second_type > > > Iteration>
auto tatooine::for_loop (Iteration &&iteration, IntPairRange const &ranges)
 
template<integral_range IntRange, for_loop_nested_index_iteration< IntRange > Iteration>
auto tatooine::for_loop (Iteration &&iteration, IntRange const &begin, IntRange const &ends, execution_policy::sequential_t)
 
template<integral_range IntRange, for_loop_nested_index_iteration< IntRange > Iteration>
auto tatooine::for_loop (Iteration &&iteration, IntRange const &begin, IntRange const &ends)
 
template<integral_range IntRange, for_loop_nested_index_iteration< IntRange > Iteration>
auto tatooine::for_loop (Iteration &&iteration, IntRange const &ends, execution_policy_tag auto policy)
 
template<integral_range IntRange, for_loop_nested_index_iteration< IntRange > Iteration>
auto tatooine::for_loop (Iteration &&iteration, IntRange const &ends)
 
template<range Range, for_loop_range_iteration< Range > Iteration>
requires (!integral<std::ranges::range_value_t<Range>>) && (!integral_pair<std::ranges::range_value_t<Range>>)
auto tatooine::for_loop (Iteration &&iteration, Range &&r, execution_policy::parallel_t) parallel_for_loop_support
 Sequential nested loop over a generic range. More...
 
template<range Range, for_loop_range_iteration< Range > Iteration>
requires (!integral<std::ranges::range_value_t<Range>>) && (!integral_pair<std::ranges::range_value_t<Range>>)
auto tatooine::for_loop (Iteration &&iteration, Range &&r, execution_policy::sequential_t)
 Sequential nested loop over a generic range. More...
 
template<range Range, for_loop_range_iteration< Range > Iteration>
requires (!integral<std::ranges::range_value_t<Range>>) && (!integral_pair<std::ranges::range_value_t<Range>>)
auto tatooine::for_loop (Iteration &&iteration, Range const &r)
 Sequential loop over a generic range. More...
 

Variables

static constexpr bool tatooine::parallel_for_loop_support = true