#include "ranges/anonymous_range.h" namespace MultiArrayTools { /****************************** * AnonymousRangeFactory * ******************************/ std::shared_ptr checkIfCreated(const std::vector >& pvec) { std::shared_ptr out; bool check = false; for(auto& x: mAleadyCreated){ if(x.second.size() == pvec.size()){ check = true; for(size_t i = 0; i != x.size(); ++i){ if(x.second[i] != static_cast( pvec[i].get() ) ){ check = false; break; } } if(check == true){ out = x.first; break; } } } if(not check){ std::vector app(pvec.size()); for(size_t i = 0; i != app.size(); ++i){ app[i] = static_cast( pvec[i].get() ); } mAleadyCreated[mProd] = app; out = mProd; } return out; } std::shared_ptr AnonymousRangeFactory::create() { mProd = checkIfCreated(); 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::factory(size()).create() ) ); // !!! i = 0; return i; } typename AnonymousRange::IndexType AnonymousRange::end() const { AnonymousIndex i ( std::dynamic_pointer_cast ( ClassicRange::factory(size()).create() ));// !!! i = size(); return i; } std::shared_ptr AnonymousRange::sub(size_t num) const { return mOrig.at(num); } /***************** * Functions * *****************/ std::shared_ptr defaultRange(size_t size ) { AnonymousRangeFactory arf ( std::dynamic_pointer_cast (ClassicRange::factory(size).create() ) ); return std::dynamic_pointer_cast( arf.create() ); } } // end namespace MultiArrayTools