some utils
This commit is contained in:
parent
a0a139b0a1
commit
45d25a4d76
4 changed files with 36 additions and 4 deletions
|
@ -120,6 +120,32 @@ namespace MultiArrayTools
|
|||
return std::dynamic_pointer_cast<Range>( rbptr );
|
||||
}
|
||||
|
||||
inline auto createRange(const vector<char>* cvec, int metaType, size_t size)
|
||||
-> std::shared_ptr<RangeBase>
|
||||
{
|
||||
auto f = createSingleRangeFactory(cvec, metaType, size);
|
||||
return f->create();
|
||||
}
|
||||
|
||||
inline auto createRangeA(const vector<char>* cvec, int metaType, size_t size)
|
||||
-> std::shared_ptr<AnonymousRange>
|
||||
{
|
||||
AnonymousRangeFactory arf(createRange(cvec, metaType, size));
|
||||
return createExplicit(arf);
|
||||
}
|
||||
|
||||
inline auto cvecMetaCast(const std::shared_ptr<SingleRange<vector<char>,SpaceType::ANY>>& r, int metaType)
|
||||
-> std::shared_ptr<RangeBase>
|
||||
{
|
||||
return createRange(&r->get(0), metaType, r->size());
|
||||
}
|
||||
|
||||
inline auto cvecMetaCastA(const std::shared_ptr<SingleRange<vector<char>,SpaceType::ANY>>& r, int metaType)
|
||||
-> std::shared_ptr<AnonymousRange>
|
||||
{
|
||||
return createRangeA(&r->get(0), metaType, r->size());
|
||||
}
|
||||
|
||||
template <class Range, typename... Args>
|
||||
auto createRangeE(Args&&... args)
|
||||
-> std::shared_ptr<Range>
|
||||
|
|
|
@ -64,6 +64,12 @@ namespace MultiArrayTools
|
|||
auto createRange(const vector<char>& cvec)
|
||||
-> std::shared_ptr<Range>;
|
||||
|
||||
inline auto createRange(const vector<char>* cvec, int metaType, size_t size)
|
||||
-> std::shared_ptr<RangeBase>;
|
||||
|
||||
inline auto createRangeA(const vector<char>* cvec, int metaType, size_t size)
|
||||
-> std::shared_ptr<AnonymousRange>;
|
||||
|
||||
template <class Range, typename... Args>
|
||||
auto createRangeE(Args&&... args)
|
||||
-> std::shared_ptr<Range>;
|
||||
|
|
|
@ -63,7 +63,7 @@ namespace MultiArrayTools
|
|||
};
|
||||
|
||||
std::shared_ptr<RangeFactoryBase> createRangeFactory(const char** dp);
|
||||
std::shared_ptr<RangeFactoryBase> createSingleRangeFactory(const vector<vector<char>>& d, size_t metaType);
|
||||
std::shared_ptr<RangeFactoryBase> createSingleRangeFactory(const vector<char>*& d, int metaType, size_t size);
|
||||
|
||||
class RangeBase
|
||||
{
|
||||
|
|
|
@ -122,15 +122,15 @@ namespace MultiArrayTools
|
|||
return out;
|
||||
}
|
||||
|
||||
std::shared_ptr<RangeFactoryBase> createSingleRangeFactory(const vector<vector<char>>& d, int metaType)
|
||||
std::shared_ptr<RangeFactoryBase> createSingleRangeFactory(const vector<char>*& d, int metaType, size_t size)
|
||||
{
|
||||
std::shared_ptr<RangeFactoryBase> out = nullptr;
|
||||
if(metaType == -1){
|
||||
assert(0);
|
||||
}
|
||||
#define register_type(x) else if(x == metaType) { \
|
||||
vector<TypeMap<x>::type> vd(d.size()); \
|
||||
std::transform(d.begin(),d.end(),vd.begin(), \
|
||||
vector<TypeMap<x>::type> vd(size); \
|
||||
std::transform(d,d+size,vd.begin(), \
|
||||
[](const vector<char>& c) \
|
||||
{ assert(c.size() == sizeof(TypeMap<x>::type)); \
|
||||
return *reinterpret_cast<TypeMap<x>::type const*>(c.data()); }); \
|
||||
|
|
Loading…
Reference in a new issue