+ClassicRange, changes in anonymous stuff (still not fixed completely -> AnonymousIndex missing)
This commit is contained in:
parent
ddc1a518d2
commit
31de87229d
8 changed files with 246 additions and 58 deletions
|
@ -6,7 +6,7 @@
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
//#include "base_def.h"
|
//#include "base_def.h"
|
||||||
#include "ranges/range_base.h"
|
#include "ranges/range_base.h"
|
||||||
#include "ranges/single_range.h"
|
#include "ranges/rpheader.h"
|
||||||
|
|
||||||
namespace MultiArrayTools
|
namespace MultiArrayTools
|
||||||
{
|
{
|
||||||
|
@ -89,12 +89,6 @@ namespace MultiArrayTools
|
||||||
mProd = std::shared_ptr<oType>( new AnonymousRange( origs... ) );
|
mProd = std::shared_ptr<oType>( new AnonymousRange( origs... ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<RangeBase> AnonymousRangeFactory::create()
|
|
||||||
{
|
|
||||||
setSelf();
|
|
||||||
return mProd;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************
|
/***********************
|
||||||
* AnonymousRange *
|
* AnonymousRange *
|
||||||
***********************/
|
***********************/
|
||||||
|
@ -114,55 +108,15 @@ namespace MultiArrayTools
|
||||||
{
|
{
|
||||||
auto rst = std::make_tuple(origs...);
|
auto rst = std::make_tuple(origs...);
|
||||||
mOrig.resize(sizeof...(RangeTypes));
|
mOrig.resize(sizeof...(RangeTypes));
|
||||||
RPackNum<sizeof...(RangeTypes)-1>::RangesToVec( rst, mOrig );
|
//RPackNum<sizeof...(RangeTypes)-1>::RangesToVec( rst, mOrig );
|
||||||
RPackNum<sizeof...(RangeTypes)-1>::getSize( rst );
|
//RPackNum<sizeof...(RangeTypes)-1>::getSize( rst );
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t AnonymousRange::get(size_t pos) const
|
/*****************
|
||||||
{
|
* Functions *
|
||||||
return pos;
|
*****************/
|
||||||
}
|
|
||||||
|
|
||||||
size_t AnonymousRange::getMeta(size_t metaPos) const
|
std::shared_ptr<AnonymousRange> defaultRange(size_t size = 0);
|
||||||
{
|
|
||||||
return metaPos;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t AnonymousRange::size() const
|
|
||||||
{
|
|
||||||
return mSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t AnonymousRange::dim() const
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
typename AnonymousRange::IndexType AnonymousRange::begin() const
|
|
||||||
{
|
|
||||||
AnonymousIndex i( std::dynamic_pointer_cast<AnonymousRange>
|
|
||||||
( std::shared_ptr<RangeBase>( RB::mThis ) ) );
|
|
||||||
i = 0;
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
typename AnonymousRange::IndexType AnonymousRange::end() const
|
|
||||||
{
|
|
||||||
AnonymousIndex i( std::dynamic_pointer_cast<AnonymousRange>
|
|
||||||
( std::shared_ptr<RangeBase>( RB::mThis ) ) );
|
|
||||||
i = size();
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
// put this in the interface class !!!
|
|
||||||
std::shared_ptr<VIWB> AnonymousRange::index() const
|
|
||||||
{
|
|
||||||
typedef IndexWrapper<IndexType> IW;
|
|
||||||
return std::make_shared<IW>
|
|
||||||
(std::make_shared<IndexType>
|
|
||||||
( std::dynamic_pointer_cast<AnonymousRange>
|
|
||||||
( std::shared_ptr<RangeBase>( RB::mThis ) ) ) );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
70
src/include/ranges/range_types/classic_range.h
Normal file
70
src/include/ranges/range_types/classic_range.h
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
|
||||||
|
#ifdef include_range_type
|
||||||
|
//include_range_type(NONE,0)
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifdef __ranges_header__
|
||||||
|
// assert, that this is only used within range_types/header.h
|
||||||
|
|
||||||
|
namespace MultiArrayTools
|
||||||
|
{
|
||||||
|
typedef SingleIndex<size_t,SpaceType::NONE> ClassicIndex;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
class SingleRangeFactory<size_t,SpaceType::NONE> : public RangeFactoryBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
typedef SingleRange<size_t,SpaceType::NONE> oType;
|
||||||
|
|
||||||
|
SingleRangeFactory(size_t size = 0);
|
||||||
|
std::shared_ptr<RangeBase> create();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
class SingleRange<size_t,SpaceType::NONE> : public RangeInterface<ClassicIndex>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
typedef RangeBase RB;
|
||||||
|
typedef typename RangeInterface<SingleIndex<size_t,SpaceType::NONE> >::IndexType IndexType;
|
||||||
|
|
||||||
|
virtual size_t size() const override;
|
||||||
|
virtual size_t dim() const override;
|
||||||
|
|
||||||
|
size_t get(size_t pos) const;
|
||||||
|
size_t getMeta(size_t metaPos) const;
|
||||||
|
|
||||||
|
virtual IndexType begin() const override;
|
||||||
|
virtual IndexType end() const override;
|
||||||
|
virtual std::shared_ptr<VIWB> index() const override;
|
||||||
|
|
||||||
|
friend SingleRangeFactory<size_t,SpaceType::NONE>;
|
||||||
|
|
||||||
|
static constexpr bool defaultable = true;
|
||||||
|
static constexpr size_t ISSTATIC = 0;
|
||||||
|
static constexpr size_t SIZE = -1;
|
||||||
|
|
||||||
|
static SingleRangeFactory<size_t, SpaceType::NONE> factory(size_t size = 0)
|
||||||
|
{ return SingleRangeFactory<size_t, SpaceType::NONE>(size); }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
size_t mSize = 0;
|
||||||
|
|
||||||
|
SingleRange() = default;
|
||||||
|
SingleRange(const SingleRange& in) = delete;
|
||||||
|
|
||||||
|
SingleRange(size_t size);
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef SingleRange<size_t,SpaceType::NONE> ClassicRange;
|
||||||
|
typedef SingleRangeFactory<size_t,SpaceType::NONE> ClassicRF;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//#endif // #ifndef __spin_range_h__
|
||||||
|
|
||||||
|
#endif // #ifdef __ranges_header__
|
||||||
|
|
||||||
|
#endif // #ifdef include_range_type
|
|
@ -15,6 +15,7 @@
|
||||||
//#define __ranges_header__
|
//#define __ranges_header__
|
||||||
|
|
||||||
#include "spin_range.h"
|
#include "spin_range.h"
|
||||||
|
#include "classic_range.h"
|
||||||
|
|
||||||
#undef __ranges_header__
|
#undef __ranges_header__
|
||||||
//#endif
|
//#endif
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
|
|
||||||
#include "single_range.h"
|
#include "rpheader.h"
|
||||||
#include "multi_range.h"
|
#include "anonymous_range.h"
|
||||||
#include "container_range.h"
|
|
||||||
//#include "anonymous_range.h" have to fix bug !!
|
|
||||||
|
|
5
src/include/ranges/rpheader.h
Normal file
5
src/include/ranges/rpheader.h
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
|
||||||
|
#include "single_range.h"
|
||||||
|
#include "multi_range.h"
|
||||||
|
#include "container_range.h"
|
||||||
|
#include "anonymous_range.h"
|
|
@ -2,6 +2,7 @@
|
||||||
set(libmultiarray_a_SOURCES
|
set(libmultiarray_a_SOURCES
|
||||||
${CMAKE_SOURCE_DIR}/src/lib/ranges/range_base.cc
|
${CMAKE_SOURCE_DIR}/src/lib/ranges/range_base.cc
|
||||||
${CMAKE_SOURCE_DIR}/src/lib/ranges/index_info.cc
|
${CMAKE_SOURCE_DIR}/src/lib/ranges/index_info.cc
|
||||||
|
${CMAKE_SOURCE_DIR}/src/lib/ranges/anonymous_range.cc
|
||||||
)
|
)
|
||||||
|
|
||||||
file(GLOB cc_files "${CMAKE_SOURCE_DIR}/src/lib/ranges/range_types/*.cc")
|
file(GLOB cc_files "${CMAKE_SOURCE_DIR}/src/lib/ranges/range_types/*.cc")
|
||||||
|
|
82
src/lib/ranges/anonymous_range.cc
Normal file
82
src/lib/ranges/anonymous_range.cc
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
|
||||||
|
#include "ranges/anonymous_range.h"
|
||||||
|
|
||||||
|
namespace MultiArrayTools
|
||||||
|
{
|
||||||
|
/******************************
|
||||||
|
* AnonymousRangeFactory *
|
||||||
|
******************************/
|
||||||
|
|
||||||
|
std::shared_ptr<RangeBase> AnonymousRangeFactory::create()
|
||||||
|
{
|
||||||
|
setSelf();
|
||||||
|
return mProd;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************
|
||||||
|
* AnonymousRange *
|
||||||
|
***********************/
|
||||||
|
|
||||||
|
size_t AnonymousRange::get(size_t pos) const
|
||||||
|
{
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t AnonymousRange::getMeta(size_t metaPos) const
|
||||||
|
{
|
||||||
|
return metaPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t AnonymousRange::size() const
|
||||||
|
{
|
||||||
|
return mSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t AnonymousRange::dim() const
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
typename AnonymousRange::IndexType AnonymousRange::begin() const
|
||||||
|
{
|
||||||
|
AnonymousIndex i
|
||||||
|
(std::dynamic_pointer_cast<ClassicRange>
|
||||||
|
( ClassicRange::factory(size()).create() ) ); // !!!
|
||||||
|
i = 0;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
typename AnonymousRange::IndexType AnonymousRange::end() const
|
||||||
|
{
|
||||||
|
AnonymousIndex i
|
||||||
|
( std::dynamic_pointer_cast<ClassicRange>
|
||||||
|
( ClassicRange::factory(size()).create() ));// !!!
|
||||||
|
i = size();
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// put this in the interface class !!!
|
||||||
|
std::shared_ptr<VIWB> AnonymousRange::index() const
|
||||||
|
{
|
||||||
|
//typedef IndexWrapper<IndexType> IW;
|
||||||
|
return std::shared_ptr<VIWB>();
|
||||||
|
/* std::make_shared<IW>
|
||||||
|
(std::make_shared<IndexType>
|
||||||
|
( std::dynamic_pointer_cast<AnonymousRange>
|
||||||
|
( std::shared_ptr<RangeBase>( RB::mThis ) ) ) ); */ //!!!!
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*****************
|
||||||
|
* Functions *
|
||||||
|
*****************/
|
||||||
|
|
||||||
|
std::shared_ptr<AnonymousRange> defaultRange(size_t size )
|
||||||
|
{
|
||||||
|
AnonymousRangeFactory arf
|
||||||
|
( std::dynamic_pointer_cast<ClassicRange>
|
||||||
|
(ClassicRange::factory(size).create() ) );
|
||||||
|
return std::dynamic_pointer_cast<AnonymousRange>( arf.create() );
|
||||||
|
}
|
||||||
|
|
||||||
|
} // end namespace MultiArrayTools
|
77
src/lib/ranges/range_types/classic_range.cc
Normal file
77
src/lib/ranges/range_types/classic_range.cc
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
|
||||||
|
#include "ranges/rheader.h"
|
||||||
|
|
||||||
|
namespace MultiArrayTools
|
||||||
|
{
|
||||||
|
/********************
|
||||||
|
* SingleRange *
|
||||||
|
********************/
|
||||||
|
|
||||||
|
SingleRangeFactory<size_t,SpaceType::NONE>::SingleRangeFactory(size_t size)
|
||||||
|
{
|
||||||
|
// Quasi Singleton
|
||||||
|
if(not mProd){
|
||||||
|
mProd = std::shared_ptr<oType>( new SingleRange<size_t,SpaceType::NONE>(size) );
|
||||||
|
setSelf();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<RangeBase> SingleRangeFactory<size_t,SpaceType::NONE>::create()
|
||||||
|
{
|
||||||
|
return mProd;
|
||||||
|
}
|
||||||
|
|
||||||
|
/********************
|
||||||
|
* SingleRange *
|
||||||
|
********************/
|
||||||
|
|
||||||
|
SingleRange<size_t,SpaceType::NONE>::SingleRange(size_t size) : mSize(size) {}
|
||||||
|
|
||||||
|
size_t SingleRange<size_t,SpaceType::NONE>::get(size_t pos) const
|
||||||
|
{
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t SingleRange<size_t,SpaceType::NONE>::getMeta(size_t metaPos) const
|
||||||
|
{
|
||||||
|
return metaPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t SingleRange<size_t,SpaceType::NONE>::size() const
|
||||||
|
{
|
||||||
|
return mSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t SingleRange<size_t,SpaceType::NONE>::dim() const
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
typename SingleRange<size_t,SpaceType::NONE>::IndexType SingleRange<size_t,SpaceType::NONE>::begin() const
|
||||||
|
{
|
||||||
|
SingleIndex<size_t,SpaceType::NONE> i( std::dynamic_pointer_cast<SingleRange<size_t,SpaceType::NONE> >
|
||||||
|
( std::shared_ptr<RangeBase>( RB::mThis ) ) );
|
||||||
|
i = 0;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
typename SingleRange<size_t,SpaceType::NONE>::IndexType SingleRange<size_t,SpaceType::NONE>::end() const
|
||||||
|
{
|
||||||
|
SingleIndex<size_t,SpaceType::NONE> i( std::dynamic_pointer_cast<SingleRange<size_t,SpaceType::NONE> >
|
||||||
|
( std::shared_ptr<RangeBase>( RB::mThis ) ) );
|
||||||
|
i = size();
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// put this in the interface class !!!
|
||||||
|
std::shared_ptr<VIWB> SingleRange<size_t,SpaceType::NONE>::index() const
|
||||||
|
{
|
||||||
|
typedef IndexWrapper<IndexType> IW;
|
||||||
|
return std::make_shared<IW>
|
||||||
|
( std::make_shared<IndexType>
|
||||||
|
( std::dynamic_pointer_cast<SingleRange<size_t,SpaceType::NONE> >
|
||||||
|
( std::shared_ptr<RangeBase>( RB::mThis ) ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue