im com (a-range not finished)
This commit is contained in:
parent
c5053b02cb
commit
1347615cb3
4 changed files with 110 additions and 28 deletions
|
@ -16,7 +16,7 @@ namespace MultiArrayTools
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
typedef SingleRange<U,TYPE> oType;
|
typedef AnonymousRange oType;
|
||||||
|
|
||||||
AnonymousRangeFactory() = delete;
|
AnonymousRangeFactory() = delete;
|
||||||
AnonymousRangeFactory(const std::shared_ptr<Ranges>... origs);
|
AnonymousRangeFactory(const std::shared_ptr<Ranges>... origs);
|
||||||
|
@ -33,8 +33,8 @@ namespace MultiArrayTools
|
||||||
virtual size_t size() const override;
|
virtual size_t size() const override;
|
||||||
virtual size_t dim() const override;
|
virtual size_t dim() const override;
|
||||||
|
|
||||||
const size_t& get(size_t pos) const;
|
size_t get(size_t pos) const;
|
||||||
size_t getMeta(const size_t& metaPos) const;
|
size_t getMeta(size_t metaPos) const;
|
||||||
|
|
||||||
virtual IndexType begin() const override;
|
virtual IndexType begin() const override;
|
||||||
virtual IndexType end() const override;
|
virtual IndexType end() const override;
|
||||||
|
@ -64,9 +64,9 @@ namespace MultiArrayTools
|
||||||
namespace MultiArrayTools
|
namespace MultiArrayTools
|
||||||
{
|
{
|
||||||
|
|
||||||
/********************
|
/***********************
|
||||||
* AnonymousRange *
|
* AnonymousRange *
|
||||||
********************/
|
***********************/
|
||||||
|
|
||||||
AnonymousRangeFactory::AnonymousRangeFactory(const std::shared_ptr<Ranges>... origs)
|
AnonymousRangeFactory::AnonymousRangeFactory(const std::shared_ptr<Ranges>... origs)
|
||||||
{
|
{
|
||||||
|
@ -79,25 +79,26 @@ namespace MultiArrayTools
|
||||||
return mProd;
|
return mProd;
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************
|
/***********************
|
||||||
* AnonymousRange *
|
* AnonymousRange *
|
||||||
********************/
|
***********************/
|
||||||
|
|
||||||
|
template <class... Ranges>
|
||||||
AnonymousRange::AnonymousRange(const std::shared_ptr<Ranges>... origs) :
|
AnonymousRange::AnonymousRange(const std::shared_ptr<Ranges>... origs) :
|
||||||
RangeInterface<AnonymousIndex>()
|
RangeInterface<AnonymousIndex>()
|
||||||
{
|
{
|
||||||
|
mOrig.resize(sizeof...(Ranges));
|
||||||
|
PackNum<sizeof...(Ranges)-1>::RangesToVec();
|
||||||
// mOrig !!!!
|
// mOrig !!!!
|
||||||
// mSize !!! = (prod origs.size...)
|
// mSize !!! = (prod origs.size...)
|
||||||
}
|
}
|
||||||
|
|
||||||
const size_t& AnonymousRange::get(size_t pos) const
|
size_t AnonymousRange::get(size_t pos) const
|
||||||
{
|
{
|
||||||
static size_t x;
|
return pos;
|
||||||
x = pos;
|
|
||||||
return x;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t AnonymousRange::getMeta(const size_t& metaPos) const
|
size_t AnonymousRange::getMeta(size_t metaPos) const
|
||||||
{
|
{
|
||||||
return metaPos;
|
return metaPos;
|
||||||
}
|
}
|
||||||
|
|
|
@ -244,7 +244,14 @@ namespace MultiArrayHelper
|
||||||
out << std::get<sizeof...(T)-N-1>(tp) << ", ";
|
out << std::get<sizeof...(T)-N-1>(tp) << ", ";
|
||||||
PackNum<N-1>::printTuple(out, tp);
|
PackNum<N-1>::printTuple(out, tp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class RangeType, class... Ranges>
|
||||||
|
static void RangesToVec(const std::shared_ptr<RangeType> r,
|
||||||
|
const std::shared_ptr<Ranges>... rs,
|
||||||
|
std::vector<RangeBase> v)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
|
|
|
@ -14,15 +14,11 @@ namespace MultiArrayTools
|
||||||
|
|
||||||
enum class RangeType
|
enum class RangeType
|
||||||
{
|
{
|
||||||
NIL = 0,
|
NONE = 0,
|
||||||
ANY = 1,
|
ANY = 1,
|
||||||
SPACE = 2,
|
#define include_range_type(x,n) x = n,
|
||||||
MOMENTUM = 3,
|
#include "range_types/header.h"
|
||||||
LORENTZ = 4,
|
#undef include_range_type
|
||||||
SPIN = 5,
|
|
||||||
ENSEMBLE = 6,
|
|
||||||
VALUE_ERROR = 7,
|
|
||||||
DISTANCE = 8
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class RangeFactoryBase
|
class RangeFactoryBase
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef include_range_type
|
||||||
|
include_range_type(SPIN,2)
|
||||||
|
#else
|
||||||
|
|
||||||
#ifdef __ranges_header__
|
#ifdef __ranges_header__
|
||||||
// assert, that this is only used within range_types/header.h
|
// assert, that this is only used within range_types/header.h
|
||||||
|
|
||||||
|
@ -32,8 +37,8 @@ namespace MultiArrayTools
|
||||||
virtual size_t size() const override;
|
virtual size_t size() const override;
|
||||||
virtual size_t dim() const override;
|
virtual size_t dim() const override;
|
||||||
|
|
||||||
const U& get(size_t pos) const;
|
size_t get(size_t pos) const;
|
||||||
size_t getMeta(const U& metaPos) const;
|
size_t getMeta(size_t metaPos) const;
|
||||||
|
|
||||||
virtual IndexType begin() const override;
|
virtual IndexType begin() const override;
|
||||||
virtual IndexType end() const override;
|
virtual IndexType end() const override;
|
||||||
|
@ -43,13 +48,16 @@ namespace MultiArrayTools
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
SingleRange() = delete;
|
SingleRange() = default;
|
||||||
SingleRange(const SingleRange& in) = delete;
|
SingleRange(const SingleRange& in) = delete;
|
||||||
|
|
||||||
SingleRange(size_t spinNum);
|
SingleRange(size_t spinNum);
|
||||||
|
|
||||||
size_t mSpinNum = 4;
|
size_t mSpinNum = 4;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef SingleRange<size_t,RangeType::SPIN> SpinRange;
|
||||||
|
typedef SingleRangeFactory<size_t,RangeType::SPIN> SpinRF;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ========================= *
|
/* ========================= *
|
||||||
|
@ -58,8 +66,78 @@ namespace MultiArrayTools
|
||||||
|
|
||||||
namespace MultiArrayTools
|
namespace MultiArrayTools
|
||||||
{
|
{
|
||||||
// ... !!!!
|
/********************
|
||||||
|
* SingleRange *
|
||||||
|
********************/
|
||||||
|
|
||||||
|
SingleRangeFactory<size_t,RangeType::SPIN>::SingleRangeFactory(const std::vector<U>& space)
|
||||||
|
{
|
||||||
|
mProd = std::shared_ptr<oType>( new SingleRange<size_t,RangeType::SPIN>( space ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<RangeBase> SingleRangeFactory<size_t,RangeType::SPIN>::create()
|
||||||
|
{
|
||||||
|
setSelf();
|
||||||
|
return mProd;
|
||||||
|
}
|
||||||
|
|
||||||
|
/********************
|
||||||
|
* SingleRange *
|
||||||
|
********************/
|
||||||
|
|
||||||
|
SingleRange<size_t,RangeType::SPIN>::SingleRange(size_t spinNum) :
|
||||||
|
RangeInterface<SingleIndex<size_t,RangeType::SPIN> >()
|
||||||
|
{
|
||||||
|
mSpinNum = spinNum;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t SingleRange<size_t,RangeType::SPIN>::get(size_t pos) const
|
||||||
|
{
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t SingleRange<size_t,RangeType::SPIN>::getMeta(size_t metaPos) const
|
||||||
|
{
|
||||||
|
return metaPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t SingleRange<size_t,RangeType::SPIN>::size() const
|
||||||
|
{
|
||||||
|
return mSpinNum;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t SingleRange<size_t,RangeType::SPIN>::dim() const
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
typename SingleRange<size_t,RangeType::SPIN>::IndexType SingleRange<size_t,RangeType::SPIN>::begin() const
|
||||||
|
{
|
||||||
|
SingleIndex<size_t,RangeType::SPIN> i( std::dynamic_pointer_cast<SingleRange<size_t,RangeType::SPIN> >
|
||||||
|
( std::shared_ptr<RangeBase>( RB::mThis ) ) );
|
||||||
|
i = 0;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
typename SingleRange<size_t,RangeType::SPIN>::IndexType SingleRange<size_t,RangeType::SPIN>::end() const
|
||||||
|
{
|
||||||
|
SingleIndex<size_t,RangeType::SPIN> i( std::dynamic_pointer_cast<SingleRange<size_t,RangeType::SPIN> >
|
||||||
|
( std::shared_ptr<RangeBase>( RB::mThis ) ) );
|
||||||
|
i = size();
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// put this in the interface class !!!
|
||||||
|
std::shared_ptr<IndexBase> SingleRange<size_t,RangeType::SPIN>::index() const
|
||||||
|
{
|
||||||
|
return std::make_shared<SingleIndex<size_t,RangeType::SPIN> >
|
||||||
|
( std::dynamic_pointer_cast<SingleRange<size_t,RangeType::SPIN> >
|
||||||
|
( std::shared_ptr<RangeBase>( RB::mThis ) ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif // #ifndef __spin_range_h__
|
||||||
#endif
|
|
||||||
|
#endif // #ifdef __ranges_header__
|
||||||
|
|
||||||
|
#endif // #ifdef include_range_type
|
||||||
|
|
Loading…
Reference in a new issue