tlx
Loading...
Searching...
No Matches
call_foreach_with_index.hpp
Go to the documentation of this file.
1
/*******************************************************************************
2
* tlx/meta/call_foreach_with_index.hpp
3
*
4
* Part of tlx - http://panthema.net/tlx
5
*
6
* Copyright (C) 2016-2017 Timo Bingmann <tb@panthema.net>
7
*
8
* All rights reserved. Published under the Boost Software License, Version 1.0
9
******************************************************************************/
10
11
#ifndef TLX_META_CALL_FOREACH_WITH_INDEX_HEADER
12
#define TLX_META_CALL_FOREACH_WITH_INDEX_HEADER
13
14
#include <utility>
15
16
#include <
tlx/meta/static_index.hpp
>
17
18
namespace
tlx
{
19
20
//! \addtogroup tlx_meta
21
//! \{
22
23
/******************************************************************************/
24
// Variadic Template Expander: run a generic templated functor (like a generic
25
// lambda) for each of the variadic template parameters.
26
//
27
// Called with func(StaticIndex<> index, Argument arg).
28
29
namespace
meta_detail {
30
31
//! helper for call_foreach_with_index: base case
32
template
<
size_t
Index,
typename
Functor,
typename
Arg>
33
void
call_foreach_with_index_impl
(Functor&& f, Arg&& arg) {
34
std::forward<Functor>(f)(
StaticIndex<Index>
(), std::forward<Arg>(arg));
35
}
36
37
//! helper for call_foreach_with_index: general recursive case
38
template
<
size_t
Index,
typename
Functor,
typename
Arg,
typename
... MoreArgs>
39
void
call_foreach_with_index_impl
(Functor&& f, Arg&& arg, MoreArgs&& ... rest) {
40
std::forward<Functor>(f)(
StaticIndex<Index>
(), std::forward<Arg>(arg));
41
call_foreach_with_index_impl<Index + 1>(
42
std::forward<Functor>(f), std::forward<MoreArgs>(rest) ...);
43
}
44
45
}
// namespace meta_detail
46
47
//! Call a generic functor (like a generic lambda) for each variadic template
48
//! argument together with its zero-based index.
49
template
<
typename
Functor,
typename
... Args>
50
void
call_foreach_with_index
(Functor&& f, Args&& ... args) {
51
meta_detail::call_foreach_with_index_impl<0>(
52
std::forward<Functor>(f), std::forward<Args>(args) ...);
53
}
54
55
//! \}
56
57
}
// namespace tlx
58
59
#endif
// !TLX_META_CALL_FOREACH_WITH_INDEX_HEADER
60
61
/******************************************************************************/
tlx::call_foreach_with_index
void call_foreach_with_index(Functor &&f, Args &&... args)
Call a generic functor (like a generic lambda) for each variadic template argument together with its ...
Definition
call_foreach_with_index.hpp:50
tlx::meta_detail::call_foreach_with_index_impl
void call_foreach_with_index_impl(Functor &&f, Arg &&arg)
helper for call_foreach_with_index: base case
Definition
call_foreach_with_index.hpp:33
tlx
Definition
exclusive_scan.hpp:17
static_index.hpp
tlx::StaticIndex
Helper for call_foreach_with_index() to save the index as a compile-time index.
Definition
static_index.hpp:24
tlx
meta
call_foreach_with_index.hpp
Generated on Sat Jul 22 2023 00:00:00 for tlx by
1.9.8