24 #ifndef PSS_ASTROTYPES_SIGPROC_RESIZEADAPTER_H
25 #define PSS_ASTROTYPES_SIGPROC_RESIZEADAPTER_H
29 namespace astrotypes {
31 template<
typename Dimension,
typename... Dimensions>
34 template<
typename Stream,
typename Dim,
typename... Dims>
35 struct ResizeAdapterStreamBase;
37 template<
typename Stream,
typename TupleType>
38 struct ExtendedResizeAdapterStream :
public ResizeAdapterStreamBase<Stream, TupleType>
40 typedef ResizeAdapterStreamBase<Stream, TupleType> BaseT;
43 ExtendedResizeAdapterStream(Stream& is, TupleType
const& ra)
51 template<
typename Stream,
typename Dim,
typename... Dims>
52 struct ResizeAdapterStreamBase {
53 typedef std::tuple<DimensionSize<Dim>, DimensionSize<Dims>...> TupleType;
55 ResizeAdapterStreamBase(Stream& is, TupleType
const& t)
59 template<
typename... ODims>
60 ExtendedResizeAdapterStream<Stream, typename merge_tuples_type<std::tuple<DimensionSize<ODims>...>, TupleType>::type>
64 typename std::enable_if<has_dimensions<typename std::decay<T>::type, Dim, Dims...>::value, Stream>::type&
69 TupleType
const& _sizes;
72 template<
typename Stream,
typename Dim,
typename... Dims>
73 struct ResizeAdapterStreamBase<Stream,
std::tuple<DimensionSize<Dim>, DimensionSize<Dims>...>>
74 :
public ResizeAdapterStreamBase<Stream, Dim, Dims...>
76 using ResizeAdapterStreamBase<Stream, Dim, Dims...>::ResizeAdapterStreamBase;
107 template<
typename Dimension,
typename... Dimensions>
110 typedef std::tuple<DimensionSize<Dimension>, DimensionSize<Dimensions>...> TupleType;
113 template<
typename StreamType>
114 struct Stream :
public ResizeAdapterStreamBase<StreamType, Dimension, Dimensions...> {
115 typedef ResizeAdapterStreamBase<StreamType, Dimension, Dimensions...> BaseT;
118 Stream(StreamType& is, ResizeAdapter& ra);
124 template<
typename Dim,
typename... Dims>
125 ResizeAdapter(DimensionSize<Dim>, DimensionSize<Dims>...);
130 template<
typename StreamT>
131 friend Stream<StreamT>
operator>>(StreamT& is, ResizeAdapter ra) {
132 return Stream<StreamT>(is, ra);
135 template<
typename Stream,
typename T,
typename... Ts>
136 friend struct ResizeAdapterStreamBase;
147 #endif // PSS_ASTROTYPES_SIGPROC_RESIZEADAPTER_H
TestDimensionStream< SDims...> & operator>>(TestDimensionStream< SDims...> &is, TestMultiArray< T, Dim, Dims...> &)