26 namespace astrotypes {
30 template <typename TupleType, std::size_t Index=std::tuple_size<TupleType>::value>
33 template<
typename DataType,
typename... Ts>
34 static inline void exec(DataType& data, TupleType
const& tuple, Ts&&... args)
36 ResizeHelper<TupleType, Index-1>::exec(data, tuple, std::forward<Ts>(args)..., std::get<Index-1>(tuple));
39 template<
typename DataType>
40 static inline void exec(DataType& data, TupleType
const& tuple)
42 ResizeHelper<TupleType, Index-1>::exec(data, tuple, std::get<Index-1>(tuple));
46 template<
typename TupleType>
47 struct ResizeHelper<TupleType, 0>
49 template<
typename DataType,
typename... Ts>
50 static inline void exec(DataType& data, TupleType
const&, Ts&&... args) {
51 data.resize(std::forward<Ts>(args)...);
57 template<
typename Dimension,
typename... Dimensions>
58 ResizeAdapter<Dimension, Dimensions...>::ResizeAdapter()
62 template<
typename Dimension,
typename... Dimensions>
63 template<
typename Dim,
typename... Dims>
64 ResizeAdapter<Dimension, Dimensions...>::ResizeAdapter(DimensionSize<Dim> dim, DimensionSize<Dims>... dims)
71 template<
typename... Dimensions>
74 template<
typename Dimension>
75 struct DimensionCopy<Dimension>
77 template<
typename StreamType,
typename TupleType>
78 inline static void exec(StreamType
const& stream, TupleType& tuple)
84 template<
typename Dimension,
typename... Dimensions>
85 struct DimensionCopy<Dimension, Dimensions...>
87 template<
typename StreamType,
typename TupleType>
88 inline static void exec(StreamType
const& stream, TupleType& tuple)
91 DimensionCopy<Dimensions...>::exec(stream, tuple);
96 template<
typename Dimension,
typename... Dimensions>
97 template<
typename StreamType>
98 ResizeAdapter<Dimension, Dimensions...>::Stream<StreamType>::Stream(StreamType& is, ResizeAdapter& ra)
99 : BaseT(is, ra._sizes)
102 DimensionCopy<Dimension, Dimensions...>::exec(is, ra._sizes);
105 template<
typename Stream,
typename Dim,
typename... Dims>
107 typename std::enable_if<has_dimensions<typename std::decay<T>::type, Dim, Dims...>::value, Stream>::type&
110 ResizeHelper<
typename std::remove_reference<decltype(this->_sizes)>::type>::exec(tf, this->_sizes);
115 template<
typename Stream,
typename Dim,
typename... Dims>
116 template<
typename... ODims>
117 ExtendedResizeAdapterStream<Stream, typename merge_tuples_type<std::tuple<DimensionSize<ODims>...>,
typename ResizeAdapterStreamBase<Stream, Dim, Dims...>::TupleType>::type>
120 return ExtendedResizeAdapterStream<Stream, typename merge_tuples_type<std::tuple<DimensionSize<ODims>...>, TupleType>::type>(this->_stream,
merge_tuples(adapter._sizes, this->_sizes));
void tuple_insert_type(std::tuple< TupleTs...> &tuple, Ts const &...values)
TestDimensionStream< SDims...> & operator>>(TestDimensionStream< SDims...> &is, TestMultiArray< T, Dim, Dims...> &)
merge_tuples_type< Tuple1, Tuple2 >::type merge_tuples(Tuple1 const &tuple1, Tuple2 const &tuple2)