Skip to content

Commit e730fee

Browse files
committed
Simplify reverse tuple iteration
1 parent e364960 commit e730fee

File tree

3 files changed

+4
-64
lines changed

3 files changed

+4
-64
lines changed

dev/functional/index_sequence_util.h

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -17,37 +17,6 @@ namespace sqlite_orm {
1717
return I;
1818
}
1919

20-
#ifdef SQLITE_ORM_RELAXED_CONSTEXPR_SUPPORTED
21-
/**
22-
* Reorder the values of an index_sequence according to the positions from a second sequence.
23-
*/
24-
template<size_t... Value, size_t... IdxOfValue>
25-
SQLITE_ORM_CONSTEVAL auto reorder_index_sequence(std::index_sequence<Value...>,
26-
std::index_sequence<IdxOfValue...>) {
27-
constexpr std::array<size_t, sizeof...(Value)> values{Value...};
28-
return std::index_sequence<values[sizeof...(Value) - 1u - IdxOfValue]...>{};
29-
}
30-
31-
template<size_t Value, size_t IdxOfValue>
32-
SQLITE_ORM_CONSTEVAL std::index_sequence<Value> reorder_index_sequence(std::index_sequence<Value>,
33-
std::index_sequence<IdxOfValue>) {
34-
return {};
35-
}
36-
37-
inline SQLITE_ORM_CONSTEVAL std::index_sequence<> reorder_index_sequence(std::index_sequence<>,
38-
std::index_sequence<>) {
39-
return {};
40-
}
41-
42-
/**
43-
* Reverse the values of an index_sequence.
44-
*/
45-
template<size_t... Idx>
46-
SQLITE_ORM_CONSTEVAL auto reverse_index_sequence(std::index_sequence<Idx...>) {
47-
return reorder_index_sequence(std::index_sequence<Idx...>{}, std::make_index_sequence<sizeof...(Idx)>{});
48-
}
49-
#endif
50-
5120
template<class... Seq>
5221
struct flatten_idxseq {
5322
using type = std::index_sequence<>;

dev/tuple_helper/tuple_iteration.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ namespace sqlite_orm {
3333
template<bool reversed = false, class Tpl, size_t... Idx, class L>
3434
void iterate_tuple(const Tpl& tpl, std::index_sequence<Idx...>, L&& lambda) {
3535
if constexpr(reversed) {
36-
iterate_tuple(tpl, reverse_index_sequence(std::index_sequence<Idx...>{}), std::forward<L>(lambda));
36+
int sink;
37+
((lambda(std::get<Idx>(tpl)), sink) = ... = 0);
3738
} else {
3839
(lambda(std::get<Idx>(tpl)), ...);
3940
}

include/sqlite_orm/sqlite_orm.h

Lines changed: 2 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1128,37 +1128,6 @@ namespace sqlite_orm {
11281128
return I;
11291129
}
11301130

1131-
#ifdef SQLITE_ORM_RELAXED_CONSTEXPR_SUPPORTED
1132-
/**
1133-
* Reorder the values of an index_sequence according to the positions from a second sequence.
1134-
*/
1135-
template<size_t... Value, size_t... IdxOfValue>
1136-
SQLITE_ORM_CONSTEVAL auto reorder_index_sequence(std::index_sequence<Value...>,
1137-
std::index_sequence<IdxOfValue...>) {
1138-
constexpr std::array<size_t, sizeof...(Value)> values{Value...};
1139-
return std::index_sequence<values[sizeof...(Value) - 1u - IdxOfValue]...>{};
1140-
}
1141-
1142-
template<size_t Value, size_t IdxOfValue>
1143-
SQLITE_ORM_CONSTEVAL std::index_sequence<Value> reorder_index_sequence(std::index_sequence<Value>,
1144-
std::index_sequence<IdxOfValue>) {
1145-
return {};
1146-
}
1147-
1148-
inline SQLITE_ORM_CONSTEVAL std::index_sequence<> reorder_index_sequence(std::index_sequence<>,
1149-
std::index_sequence<>) {
1150-
return {};
1151-
}
1152-
1153-
/**
1154-
* Reverse the values of an index_sequence.
1155-
*/
1156-
template<size_t... Idx>
1157-
SQLITE_ORM_CONSTEVAL auto reverse_index_sequence(std::index_sequence<Idx...>) {
1158-
return reorder_index_sequence(std::index_sequence<Idx...>{}, std::make_index_sequence<sizeof...(Idx)>{});
1159-
}
1160-
#endif
1161-
11621131
template<class... Seq>
11631132
struct flatten_idxseq {
11641133
using type = std::index_sequence<>;
@@ -9574,7 +9543,8 @@ namespace sqlite_orm {
95749543
template<bool reversed = false, class Tpl, size_t... Idx, class L>
95759544
void iterate_tuple(const Tpl& tpl, std::index_sequence<Idx...>, L&& lambda) {
95769545
if constexpr(reversed) {
9577-
iterate_tuple(tpl, reverse_index_sequence(std::index_sequence<Idx...>{}), std::forward<L>(lambda));
9546+
int sink;
9547+
((lambda(std::get<Idx>(tpl)), sink) = ... = 0);
95789548
} else {
95799549
(lambda(std::get<Idx>(tpl)), ...);
95809550
}

0 commit comments

Comments
 (0)