tuple/type: add prefix query
This commit is contained in:
parent
de282c556e
commit
f5afc0130a
@ -99,5 +99,17 @@ main (void)
|
|||||||
tap.expect (std::is_same<dst_t, std::tuple<int>>::value, "tuple type mapping");
|
tap.expect (std::is_same<dst_t, std::tuple<int>>::value, "tuple type mapping");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Test that prefix extraction of a tuple works as expected.
|
||||||
|
using full_t = std::tuple<i08, i16, i32, i64>;
|
||||||
|
|
||||||
|
static constexpr std::size_t LENGTH = 2;
|
||||||
|
using prefix_t = cruft::tuple::type::prefix_t<LENGTH, full_t>;
|
||||||
|
|
||||||
|
using expected_t = std::tuple<i08, i16>;
|
||||||
|
|
||||||
|
tap.expect (std::is_same_v<prefix_t, expected_t>, "tuple prefix");
|
||||||
|
}
|
||||||
|
|
||||||
return tap.status ();
|
return tap.status ();
|
||||||
}
|
}
|
@ -335,4 +335,37 @@ namespace cruft::tuple::type {
|
|||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
template <typename TupleT, std::size_t IndexV>
|
template <typename TupleT, std::size_t IndexV>
|
||||||
using nth_t = typename nth<TupleT, IndexV>::type;
|
using nth_t = typename nth<TupleT, IndexV>::type;
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
/// Extract the first CountV types of the tuple-like-object and store them
|
||||||
|
/// in a tuple definition.
|
||||||
|
template <
|
||||||
|
std::size_t CountV,
|
||||||
|
typename TupleT,
|
||||||
|
typename Indices = std::make_index_sequence<CountV>
|
||||||
|
>
|
||||||
|
struct prefix;
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
template <
|
||||||
|
std::size_t CountV,
|
||||||
|
typename TupleT,
|
||||||
|
std::size_t ...IndexV
|
||||||
|
>
|
||||||
|
struct prefix<
|
||||||
|
CountV,
|
||||||
|
TupleT,
|
||||||
|
std::index_sequence<IndexV...>
|
||||||
|
> {
|
||||||
|
using type = std::tuple<
|
||||||
|
std::tuple_element_t<IndexV, TupleT>...
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
template <std::size_t CountV, typename TupleT>
|
||||||
|
using prefix_t = typename prefix<CountV, TupleT>::type;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user