further lib fixes...

This commit is contained in:
Christian Zimmermann 2018-02-14 18:15:34 +01:00
parent de43a2658c
commit ddc1a518d2
4 changed files with 83 additions and 78 deletions

View file

@ -66,81 +66,6 @@ namespace MultiArrayTools
typedef SingleRangeFactory<size_t,SpaceType::SPIN> SpinRF; typedef SingleRangeFactory<size_t,SpaceType::SPIN> SpinRF;
} }
/* ========================= *
* --- TEMPLATE CODE --- *
* ========================= */
namespace MultiArrayTools
{
/********************
* SingleRange *
********************/
SingleRangeFactory<size_t,SpaceType::SPIN>::SingleRangeFactory()
{
// Quasi Singleton
if(not mProd){
mProd = std::shared_ptr<oType>( new SingleRange<size_t,SpaceType::SPIN>() );
setSelf();
}
}
std::shared_ptr<RangeBase> SingleRangeFactory<size_t,SpaceType::SPIN>::create()
{
return mProd;
}
/********************
* SingleRange *
********************/
size_t SingleRange<size_t,SpaceType::SPIN>::get(size_t pos) const
{
return pos;
}
size_t SingleRange<size_t,SpaceType::SPIN>::getMeta(size_t metaPos) const
{
return metaPos;
}
size_t SingleRange<size_t,SpaceType::SPIN>::size() const
{
return mSpinNum;
}
size_t SingleRange<size_t,SpaceType::SPIN>::dim() const
{
return 1;
}
typename SingleRange<size_t,SpaceType::SPIN>::IndexType SingleRange<size_t,SpaceType::SPIN>::begin() const
{
SingleIndex<size_t,SpaceType::SPIN> i( std::dynamic_pointer_cast<SingleRange<size_t,SpaceType::SPIN> >
( std::shared_ptr<RangeBase>( RB::mThis ) ) );
i = 0;
return i;
}
typename SingleRange<size_t,SpaceType::SPIN>::IndexType SingleRange<size_t,SpaceType::SPIN>::end() const
{
SingleIndex<size_t,SpaceType::SPIN> i( std::dynamic_pointer_cast<SingleRange<size_t,SpaceType::SPIN> >
( std::shared_ptr<RangeBase>( RB::mThis ) ) );
i = size();
return i;
}
// put this in the interface class !!!
std::shared_ptr<VIWB> SingleRange<size_t,SpaceType::SPIN>::index() const
{
typedef IndexWrapper<IndexType> IW;
return std::make_shared<IW>
( std::make_shared<IndexType>
( std::dynamic_pointer_cast<SingleRange<size_t,SpaceType::SPIN> >
( std::shared_ptr<RangeBase>( RB::mThis ) ) ) );
}
}
//#endif // #ifndef __spin_range_h__ //#endif // #ifndef __spin_range_h__

View file

@ -94,10 +94,10 @@ namespace MultiArrayHelper
}; };
template <size_t N> template <size_t N>
size_t exceptMax(size_t max) { return max; } inline size_t exceptMax(size_t max) { return max; }
template <> template <>
size_t exceptMax<1>(size_t max) { return 1; } inline size_t exceptMax<1>(size_t max) { return 1; }
} // namespace MultiArrayHelper } // namespace MultiArrayHelper

View file

@ -2,9 +2,14 @@
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/operation_utils.cc
) )
file(GLOB cc_files "${CMAKE_SOURCE_DIR}/src/lib/ranges/range_types/*.cc")
foreach(ccfile ${cc_files})
set(libmultiarray_a_SOURCES ${libmultiarray_a_SOURCES}
${ccfile})
endforeach(ccfile)
add_library(multiarray STATIC ${libmultiarray_a_SOURCES}) add_library(multiarray STATIC ${libmultiarray_a_SOURCES})
install(TARGETS multiarray install(TARGETS multiarray
ARCHIVE DESTINATION ${INSTALL_PATH}/lib ARCHIVE DESTINATION ${INSTALL_PATH}/lib

View file

@ -0,0 +1,75 @@
#include "ranges/rheader.h"
namespace MultiArrayTools
{
/********************
* SingleRange *
********************/
SingleRangeFactory<size_t,SpaceType::SPIN>::SingleRangeFactory()
{
// Quasi Singleton
if(not mProd){
mProd = std::shared_ptr<oType>( new SingleRange<size_t,SpaceType::SPIN>() );
setSelf();
}
}
std::shared_ptr<RangeBase> SingleRangeFactory<size_t,SpaceType::SPIN>::create()
{
return mProd;
}
/********************
* SingleRange *
********************/
size_t SingleRange<size_t,SpaceType::SPIN>::get(size_t pos) const
{
return pos;
}
size_t SingleRange<size_t,SpaceType::SPIN>::getMeta(size_t metaPos) const
{
return metaPos;
}
size_t SingleRange<size_t,SpaceType::SPIN>::size() const
{
return mSpinNum;
}
size_t SingleRange<size_t,SpaceType::SPIN>::dim() const
{
return 1;
}
typename SingleRange<size_t,SpaceType::SPIN>::IndexType SingleRange<size_t,SpaceType::SPIN>::begin() const
{
SingleIndex<size_t,SpaceType::SPIN> i( std::dynamic_pointer_cast<SingleRange<size_t,SpaceType::SPIN> >
( std::shared_ptr<RangeBase>( RB::mThis ) ) );
i = 0;
return i;
}
typename SingleRange<size_t,SpaceType::SPIN>::IndexType SingleRange<size_t,SpaceType::SPIN>::end() const
{
SingleIndex<size_t,SpaceType::SPIN> i( std::dynamic_pointer_cast<SingleRange<size_t,SpaceType::SPIN> >
( std::shared_ptr<RangeBase>( RB::mThis ) ) );
i = size();
return i;
}
// put this in the interface class !!!
std::shared_ptr<VIWB> SingleRange<size_t,SpaceType::SPIN>::index() const
{
typedef IndexWrapper<IndexType> IW;
return std::make_shared<IW>
( std::make_shared<IndexType>
( std::dynamic_pointer_cast<SingleRange<size_t,SpaceType::SPIN> >
( std::shared_ptr<RangeBase>( RB::mThis ) ) ) );
}
}