2017-03-02 19:27:46 +01:00
|
|
|
// -*- C++ -*-
|
|
|
|
|
|
|
|
#ifndef __range_transformer_h__
|
|
|
|
#define __range_transformer_h__
|
|
|
|
|
|
|
|
#include <cstdlib>
|
|
|
|
#include "base_def.h"
|
|
|
|
|
|
|
|
namespace MultiArrayTools
|
|
|
|
{
|
|
|
|
|
|
|
|
template <class... Ranges>
|
2017-03-08 20:10:11 +01:00
|
|
|
MultiRange<Ranges...> makeRange(const std::tuple<Ranges...>& rangeTuple);
|
|
|
|
|
|
|
|
template <class... Ranges>
|
|
|
|
MultiRange<Ranges...> combine(const Ranges&... ranges);
|
2017-03-02 19:27:46 +01:00
|
|
|
|
2017-03-08 20:10:11 +01:00
|
|
|
template <class Range, class... Ranges>
|
|
|
|
auto extend(const Range& r, const MultiRange<Ranges...>& mr)
|
|
|
|
-> decltype( MultiRange<Range,Ranges...>(std::tuple_cat( std::make_tuple(r), mr.space() ) ) );
|
|
|
|
|
|
|
|
template <class MultiRange1, class MultiRange2>
|
|
|
|
auto merge(const MultiRange1& mr1, const MultiRange2& mr2)
|
|
|
|
-> decltype(makeRange( std::tuple_cat( mr1.space(), mr2.space() ) ) );
|
2017-03-02 19:27:46 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
#include "range_transformer.cc"
|
|
|
|
|
|
|
|
#endif
|