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:
|
||||
|
||||
typedef SingleRange<U,TYPE> oType;
|
||||
typedef AnonymousRange oType;
|
||||
|
||||
AnonymousRangeFactory() = delete;
|
||||
AnonymousRangeFactory(const std::shared_ptr<Ranges>... origs);
|
||||
|
@ -33,8 +33,8 @@ namespace MultiArrayTools
|
|||
virtual size_t size() const override;
|
||||
virtual size_t dim() const override;
|
||||
|
||||
const size_t& get(size_t pos) const;
|
||||
size_t getMeta(const size_t& metaPos) const;
|
||||
size_t get(size_t pos) const;
|
||||
size_t getMeta(size_t metaPos) const;
|
||||
|
||||
virtual IndexType begin() const override;
|
||||
virtual IndexType end() const override;
|
||||
|
@ -64,9 +64,9 @@ namespace MultiArrayTools
|
|||
namespace MultiArrayTools
|
||||
{
|
||||
|
||||
/********************
|
||||
/***********************
|
||||
* AnonymousRange *
|
||||
********************/
|
||||
***********************/
|
||||
|
||||
AnonymousRangeFactory::AnonymousRangeFactory(const std::shared_ptr<Ranges>... origs)
|
||||
{
|
||||
|
@ -79,25 +79,26 @@ namespace MultiArrayTools
|
|||
return mProd;
|
||||
}
|
||||
|
||||
/********************
|
||||
/***********************
|
||||
* AnonymousRange *
|
||||
********************/
|
||||
***********************/
|
||||
|
||||
template <class... Ranges>
|
||||
AnonymousRange::AnonymousRange(const std::shared_ptr<Ranges>... origs) :
|
||||
RangeInterface<AnonymousIndex>()
|
||||
{
|
||||
mOrig.resize(sizeof...(Ranges));
|
||||
PackNum<sizeof...(Ranges)-1>::RangesToVec();
|
||||
// mOrig !!!!
|
||||
// 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;
|
||||
x = pos;
|
||||
return x;
|
||||
return pos;
|
||||
}
|
||||
|
||||
size_t AnonymousRange::getMeta(const size_t& metaPos) const
|
||||
size_t AnonymousRange::getMeta(size_t metaPos) const
|
||||
{
|
||||
return metaPos;
|
||||
}
|
||||
|
|
|
@ -245,6 +245,13 @@ namespace MultiArrayHelper
|
|||
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<>
|
||||
|
|
|
@ -14,15 +14,11 @@ namespace MultiArrayTools
|
|||
|
||||
enum class RangeType
|
||||
{
|
||||
NIL = 0,
|
||||
NONE = 0,
|
||||
ANY = 1,
|
||||
SPACE = 2,
|
||||
MOMENTUM = 3,
|
||||
LORENTZ = 4,
|
||||
SPIN = 5,
|
||||
ENSEMBLE = 6,
|
||||
VALUE_ERROR = 7,
|
||||
DISTANCE = 8
|
||||
#define include_range_type(x,n) x = n,
|
||||
#include "range_types/header.h"
|
||||
#undef include_range_type
|
||||
};
|
||||
|
||||
class RangeFactoryBase
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
|
||||
|
||||
#ifdef include_range_type
|
||||
include_range_type(SPIN,2)
|
||||
#else
|
||||
|
||||
#ifdef __ranges_header__
|
||||
// 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 dim() const override;
|
||||
|
||||
const U& get(size_t pos) const;
|
||||
size_t getMeta(const U& metaPos) const;
|
||||
size_t get(size_t pos) const;
|
||||
size_t getMeta(size_t metaPos) const;
|
||||
|
||||
virtual IndexType begin() const override;
|
||||
virtual IndexType end() const override;
|
||||
|
@ -43,13 +48,16 @@ namespace MultiArrayTools
|
|||
|
||||
protected:
|
||||
|
||||
SingleRange() = delete;
|
||||
SingleRange() = default;
|
||||
SingleRange(const SingleRange& in) = delete;
|
||||
|
||||
SingleRange(size_t spinNum);
|
||||
|
||||
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
|
||||
{
|
||||
// ... !!!!
|
||||
/********************
|
||||
* SingleRange *
|
||||
********************/
|
||||
|
||||
SingleRangeFactory<size_t,RangeType::SPIN>::SingleRangeFactory(const std::vector<U>& space)
|
||||
{
|
||||
mProd = std::shared_ptr<oType>( new SingleRange<size_t,RangeType::SPIN>( space ) );
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
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 // #ifndef __spin_range_h__
|
||||
|
||||
#endif // #ifdef __ranges_header__
|
||||
|
||||
#endif // #ifdef include_range_type
|
||||
|
|
Loading…
Reference in a new issue