tuple/value: add reversing operation
This commit is contained in:
parent
1bafe204b6
commit
665c8aa49e
@ -29,5 +29,13 @@ main (void)
|
||||
tap.expect_eq (c, util::tuple::value::zip (a, b), "tuple zipping");
|
||||
}
|
||||
|
||||
{
|
||||
std::tuple a (1, 2);
|
||||
auto result = util::tuple::value::reverse (a);
|
||||
std::tuple expected (2, 1);
|
||||
|
||||
tap.expect_eq (result, expected, "tuple reverse");
|
||||
}
|
||||
|
||||
return tap.status ();
|
||||
}
|
||||
|
@ -17,6 +17,7 @@
|
||||
#ifndef CRUFT_UTIL_TUPLE_VALUE_HPP
|
||||
#define CRUFT_UTIL_TUPLE_VALUE_HPP
|
||||
|
||||
#include "index.hpp"
|
||||
#include "../types.hpp"
|
||||
|
||||
#include <cstddef>
|
||||
@ -123,6 +124,32 @@ namespace util::tuple::value {
|
||||
std::forward<Args> (args)...
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
namespace detail {
|
||||
template <typename TupleT, size_t ...Indices>
|
||||
auto
|
||||
reverse (index::indices<Indices...>, TupleT &&val)
|
||||
{
|
||||
return std::make_tuple (
|
||||
std::get<Indices> (val)...
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
template <typename TupleT>
|
||||
auto
|
||||
reverse (TupleT &&val)
|
||||
{
|
||||
return detail::reverse (
|
||||
index::make_reverse_t<
|
||||
std::tuple_size_v<std::decay_t<TupleT>>
|
||||
> {},
|
||||
std::forward<TupleT> (val)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user