tuple additions/fixes

master
Daniel Kolesa 2015-07-11 15:06:42 +01:00
parent 13ef36ba01
commit cd6e2a96aa
3 changed files with 27 additions and 14 deletions

View File

@ -11,6 +11,7 @@
#include "octa/algorithm.hh"
#include "octa/range.hh"
#include "octa/string.hh"
#include "octa/internal/tuple.hh"
namespace octa {
@ -75,6 +76,31 @@ struct Array {
T p_buf[(N > 0) ? N : 1];
};
template<typename T, Size N>
struct TupleSize<Array<T, N>>: IntegralConstant<Size, N> {};
namespace detail {
template<Size I, typename T, Size N>
struct TupleElementBase<I, Array<T, N>> {
using Type = T;
};
}
template<Size I, typename T, Size N>
TupleElement<I, Array<T, N>> &get(Array<T, N> &a) {
return a[I];
}
template<Size I, typename T, Size N>
const TupleElement<I, Array<T, N>> &get(const Array<T, N> &a) {
return a[I];
}
template<Size I, typename T, Size N>
TupleElement<I, Array<T, N>> &&get(Array<T, N> &&a) {
return a[I];
}
} /* namespace octa */
#endif

View File

@ -372,7 +372,7 @@ public:
>
>::value
>> Tuple(AllocatorArg, const Alloc &a, T &&...t):
p_base(detail::MakeTupleIndices<sizeof...(T)>(),
p_base(allocator_arg, a, detail::MakeTupleIndices<sizeof...(T)>(),
detail::MakeTupleTypes<Tuple, sizeof...(T)>(),
detail::MakeTupleIndices<sizeof...(A), sizeof...(T)>(),
detail::MakeTupleTypes<Tuple, sizeof...(A), sizeof...(T)>(),

View File

@ -170,9 +170,6 @@ Pair<typename detail::MakePairRet<T>::Type,
template<typename T, typename U>
struct TupleSize<Pair<T, U>>: IntegralConstant<Size, 2> {};
template<typename T, typename U>
struct TupleSize<const Pair<T, U>>: IntegralConstant<Size, 2> {};
namespace detail {
template<typename T, typename U>
struct TupleElementBase<0, Pair<T, U>> {
@ -184,16 +181,6 @@ namespace detail {
using Type = U;
};
template<typename T, typename U>
struct TupleElementBase<0, const Pair<T, U>> {
using Type = const T;
};
template<typename T, typename U>
struct TupleElementBase<1, const Pair<T, U>> {
using Type = const U;
};
template<Size> struct GetPair;
template<> struct GetPair<0> {