add UR_Test + remove operator-> for index classes where it conflicts with c++ syntax
This commit is contained in:
parent
4e2244db79
commit
62a9df39d3
15 changed files with 58 additions and 135 deletions
|
@ -30,11 +30,7 @@ namespace CNORXZ
|
||||||
IndexId<0> id() const;
|
IndexId<0> id() const;
|
||||||
|
|
||||||
SizeT operator*() const;
|
SizeT operator*() const;
|
||||||
SizeT operator->() const;
|
|
||||||
|
|
||||||
Int pp(PtrId idxPtrNum);
|
|
||||||
Int mm(PtrId idxPtrNum);
|
|
||||||
|
|
||||||
SizeT dim() const; // = 1
|
SizeT dim() const; // = 1
|
||||||
Sptr<RangeType> range() const;
|
Sptr<RangeType> range() const;
|
||||||
UPos stepSize(const IndexId<0>& id) const;
|
UPos stepSize(const IndexId<0>& id) const;
|
||||||
|
|
|
@ -36,10 +36,6 @@ namespace CNORXZ
|
||||||
IndexId<0> id() const;
|
IndexId<0> id() const;
|
||||||
|
|
||||||
DType operator*() const;
|
DType operator*() const;
|
||||||
DType operator->() const;
|
|
||||||
|
|
||||||
Int pp(PtrId idxPtrNum);
|
|
||||||
Int mm(PtrId idxPtrNum);
|
|
||||||
|
|
||||||
SizeT dim() const;
|
SizeT dim() const;
|
||||||
RangePtr range() const;
|
RangePtr range() const;
|
||||||
|
|
|
@ -41,11 +41,7 @@ namespace CNORXZ
|
||||||
bool operator<=(const IndexInterface& in) const;
|
bool operator<=(const IndexInterface& in) const;
|
||||||
bool operator>=(const IndexInterface& in) const;
|
bool operator>=(const IndexInterface& in) const;
|
||||||
decltype(auto) operator*() const { return THIS().operator*(); }
|
decltype(auto) operator*() const { return THIS().operator*(); }
|
||||||
decltype(auto) operator->() const { return THIS().operator->(); }
|
|
||||||
|
|
||||||
Int pp(PtrId idxPtrNum) { return THIS().pp(idxPtrNum); }
|
|
||||||
Int mm(PtrId idxPtrNum) { return THIS().mm(idxPtrNum); }
|
|
||||||
|
|
||||||
SizeT dim() const { return THIS().dim(); }
|
SizeT dim() const { return THIS().dim(); }
|
||||||
decltype(auto) range() const { return THIS().range(); }
|
decltype(auto) range() const { return THIS().range(); }
|
||||||
|
|
||||||
|
|
|
@ -198,12 +198,6 @@ namespace CNORXZ
|
||||||
return meta();
|
return meta();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class... Indices>
|
|
||||||
MetaType MIndex<Indices...>::operator->() const
|
|
||||||
{
|
|
||||||
return meta();
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class... Indices>
|
template <class... Indices>
|
||||||
SizeT MIndex<Indices...>::dim() const
|
SizeT MIndex<Indices...>::dim() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -46,7 +46,6 @@ namespace CNORXZ
|
||||||
IndexId<0> id() const;
|
IndexId<0> id() const;
|
||||||
|
|
||||||
MetaType operator*() const;
|
MetaType operator*() const;
|
||||||
MetaType operator->() const;
|
|
||||||
|
|
||||||
SizeT dim() const
|
SizeT dim() const
|
||||||
Sptr<RangeType> range() const;
|
Sptr<RangeType> range() const;
|
||||||
|
|
|
@ -48,9 +48,6 @@ namespace CNORXZ
|
||||||
|
|
||||||
SubIndex& operator()(const std::shared_ptr<Index>& ind); // set full index
|
SubIndex& operator()(const std::shared_ptr<Index>& ind); // set full index
|
||||||
|
|
||||||
int pp(std::intptr_t idxPtrNum);
|
|
||||||
int mm(std::intptr_t idxPtrNum);
|
|
||||||
|
|
||||||
std::string stringMeta() const;
|
std::string stringMeta() const;
|
||||||
MetaType meta() const;
|
MetaType meta() const;
|
||||||
const MetaType* metaPtr() const;
|
const MetaType* metaPtr() const;
|
||||||
|
|
|
@ -17,7 +17,7 @@ namespace CNORXZ
|
||||||
template <typename MetaType>
|
template <typename MetaType>
|
||||||
UIndex<MetaType>::UIndex(const RangePtr& range, SizeT pos) :
|
UIndex<MetaType>::UIndex(const RangePtr& range, SizeT pos) :
|
||||||
IndexInterface<UIndex<MetaType>,MetaType>(pos),
|
IndexInterface<UIndex<MetaType>,MetaType>(pos),
|
||||||
mRangePtr(rangeCast<MetaType>(range)),
|
mRangePtr(rangeCast<RangeType>(range)),
|
||||||
mMetaPtr(&mRangePtr->get(0))
|
mMetaPtr(&mRangePtr->get(0))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -86,12 +86,6 @@ namespace CNORXZ
|
||||||
return mMetaPtr[IB::mPos];
|
return mMetaPtr[IB::mPos];
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename MetaType>
|
|
||||||
const MetaType* UIndex<MetaType>::operator->() const
|
|
||||||
{
|
|
||||||
return mMetaPtr + IB::mPos;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename MetaType>
|
template <typename MetaType>
|
||||||
String UIndex<MetaType>::stringMeta() const
|
String UIndex<MetaType>::stringMeta() const
|
||||||
{
|
{
|
||||||
|
@ -134,7 +128,7 @@ namespace CNORXZ
|
||||||
template <class Xpr, class F>
|
template <class Xpr, class F>
|
||||||
decltype(auto) UIndex<MetaType>::ifor(const Xpr& xpr, F&& f) const
|
decltype(auto) UIndex<MetaType>::ifor(const Xpr& xpr, F&& f) const
|
||||||
{
|
{
|
||||||
return For<0,Xpr>(this->max(), this->id(), xpr, std::forward<F>(f));
|
return For<0,Xpr,F>(this->max(), this->id(), xpr, std::forward<F>(f));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
|
@ -160,9 +154,9 @@ namespace CNORXZ
|
||||||
template <typename MetaType>
|
template <typename MetaType>
|
||||||
void URangeFactory<MetaType>::make()
|
void URangeFactory<MetaType>::make()
|
||||||
{
|
{
|
||||||
auto info = typeid(URange<MetaType>);
|
const auto& info = typeid(URange<MetaType>);
|
||||||
if(mRef != nullptr) {
|
if(mRef != nullptr) {
|
||||||
mProd = this->fromCreated[info.hash_code()][mRef->id()];
|
mProd = this->fromCreated(info, {mRef->id()});
|
||||||
}
|
}
|
||||||
if(mProd == nullptr){
|
if(mProd == nullptr){
|
||||||
RangePtr key = mProd = std::shared_ptr<URange<MetaType>>
|
RangePtr key = mProd = std::shared_ptr<URange<MetaType>>
|
||||||
|
@ -188,7 +182,7 @@ namespace CNORXZ
|
||||||
|
|
||||||
template <typename MetaType>
|
template <typename MetaType>
|
||||||
URange<MetaType>::URange(Vector<MetaType>&& space) :
|
URange<MetaType>::URange(Vector<MetaType>&& space) :
|
||||||
RangeInterface<URange<MetaType>,MetaType>(),
|
RangeInterface<UIndex<MetaType>,MetaType>(),
|
||||||
mSpace(space)
|
mSpace(space)
|
||||||
{
|
{
|
||||||
std::sort(mSpace.begin(), mSpace.end(), std::less<MetaType>());
|
std::sort(mSpace.begin(), mSpace.end(), std::less<MetaType>());
|
||||||
|
@ -230,21 +224,15 @@ namespace CNORXZ
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename MetaType>
|
template <typename MetaType>
|
||||||
typename URange<MetaType>::IndexType URange<MetaType>::begin() const
|
const TypeInfo& URange<MetaType>::type() const
|
||||||
{
|
{
|
||||||
UIndex<MetaType> i( std::dynamic_pointer_cast<URange<MetaType> >
|
return typeid(URange<MetaType>);
|
||||||
( RangePtr( RB::mThis ) ) );
|
|
||||||
i = 0;
|
|
||||||
return i;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename MetaType>
|
template <typename MetaType>
|
||||||
typename URange<MetaType>::IndexType URange<MetaType>::end() const
|
const TypeInfo& URange<MetaType>::metaType() const
|
||||||
{
|
{
|
||||||
UIndex<MetaType> i( std::dynamic_pointer_cast<URange<MetaType> >
|
return typeid(MetaType);
|
||||||
( RangePtr( RB::mThis ) ) );
|
|
||||||
i = this->size();
|
|
||||||
return i;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*******************
|
/*******************
|
||||||
|
|
|
@ -33,7 +33,6 @@ namespace CNORXZ
|
||||||
IndexId<0> id() const;
|
IndexId<0> id() const;
|
||||||
|
|
||||||
const MetaType& operator*() const;
|
const MetaType& operator*() const;
|
||||||
const MetaType* operator->() const;
|
|
||||||
|
|
||||||
SizeT dim() const; // = 1
|
SizeT dim() const; // = 1
|
||||||
Sptr<RangeType> range() const;
|
Sptr<RangeType> range() const;
|
||||||
|
@ -82,8 +81,8 @@ namespace CNORXZ
|
||||||
virtual SizeT size() const override final;
|
virtual SizeT size() const override final;
|
||||||
virtual SizeT dim() const override final;
|
virtual SizeT dim() const override final;
|
||||||
virtual String stringMeta(SizeT pos) const override final;
|
virtual String stringMeta(SizeT pos) const override final;
|
||||||
virtual IndexType begin() const override final;
|
virtual const TypeInfo& type() const override final;
|
||||||
virtual IndexType end() const override final;
|
virtual const TypeInfo& metaType() const override final;
|
||||||
|
|
||||||
const MetaType& get(SizeT pos) const;
|
const MetaType& get(SizeT pos) const;
|
||||||
SizeT getMeta(const MetaType& metaPos) const;
|
SizeT getMeta(const MetaType& metaPos) const;
|
||||||
|
|
|
@ -95,26 +95,6 @@ namespace CNORXZ
|
||||||
{
|
{
|
||||||
return DType(*(*mI));
|
return DType(*(*mI));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Index, typename Meta>
|
|
||||||
DType XIndex<Index,Meta>::operator->() const
|
|
||||||
{
|
|
||||||
return DType(*(*mI));
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class Index, typename Meta>
|
|
||||||
Int XIndex<Index,Meta>::pp(PtrId idxPtrNum)
|
|
||||||
{
|
|
||||||
Int out = mI->pp(idxPtrNum);
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class Index, typename Meta>
|
|
||||||
Int XIndex<Index,Meta>::mm(PtrId idxPtrNum)
|
|
||||||
{
|
|
||||||
Int out = mI->mm(idxPtrNum);
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class Index, typename Meta>
|
template <class Index, typename Meta>
|
||||||
SizeT XIndex<Index,Meta>::dim() const
|
SizeT XIndex<Index,Meta>::dim() const
|
||||||
|
|
|
@ -29,10 +29,6 @@ namespace CNORXZ
|
||||||
virtual IndexId<0> id() const = 0;
|
virtual IndexId<0> id() const = 0;
|
||||||
|
|
||||||
virtual DType operator*() const = 0;
|
virtual DType operator*() const = 0;
|
||||||
virtual DType operator->() const = 0;
|
|
||||||
|
|
||||||
virtual Int pp(PtrId idxPtrNum) = 0;
|
|
||||||
virtual Int mm(PtrId idxPtrNum) = 0;
|
|
||||||
|
|
||||||
virtual SizeT dim() const = 0;
|
virtual SizeT dim() const = 0;
|
||||||
virtual RangePtr range() const = 0;
|
virtual RangePtr range() const = 0;
|
||||||
|
@ -79,10 +75,6 @@ namespace CNORXZ
|
||||||
virtual IndexId<0> id() const override final;
|
virtual IndexId<0> id() const override final;
|
||||||
|
|
||||||
virtual DType operator*() const override final;
|
virtual DType operator*() const override final;
|
||||||
virtual DType operator->() const override final;
|
|
||||||
|
|
||||||
virtual Int pp(PtrId idxPtrNum) override final;
|
|
||||||
virtual Int mm(PtrId idxPtrNum) override final;
|
|
||||||
|
|
||||||
virtual SizeT dim() const override final;
|
virtual SizeT dim() const override final;
|
||||||
virtual RangePtr range() const override final;
|
virtual RangePtr range() const override final;
|
||||||
|
|
|
@ -38,10 +38,6 @@ namespace CNORXZ
|
||||||
IndexId<0> id() const;
|
IndexId<0> id() const;
|
||||||
|
|
||||||
DType operator*() const;
|
DType operator*() const;
|
||||||
DType operator->() const;
|
|
||||||
|
|
||||||
Int pp(PtrId idxPtrNum);
|
|
||||||
Int mm(PtrId idxPtrNum);
|
|
||||||
|
|
||||||
SizeT dim() const;
|
SizeT dim() const;
|
||||||
Sptr<YRange> range() const;
|
Sptr<YRange> range() const;
|
||||||
|
|
|
@ -66,23 +66,6 @@ namespace CNORXZ
|
||||||
return IB::mPos;
|
return IB::mPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
SizeT CIndex::operator->() const
|
|
||||||
{
|
|
||||||
return IB::mPos; // check if this makes sense!!!
|
|
||||||
}
|
|
||||||
|
|
||||||
Int CIndex::pp(PtrId idxPtrNum)
|
|
||||||
{
|
|
||||||
++(*this);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
Int CIndex::mm(PtrId idxPtrNum)
|
|
||||||
{
|
|
||||||
--(*this);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
SizeT CIndex::dim() const // = 1
|
SizeT CIndex::dim() const // = 1
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -87,25 +87,6 @@ namespace CNORXZ
|
||||||
return *(*mI);
|
return *(*mI);
|
||||||
}
|
}
|
||||||
|
|
||||||
DType DIndex::operator->() const
|
|
||||||
{
|
|
||||||
return *(*mI);
|
|
||||||
}
|
|
||||||
|
|
||||||
Int DIndex::pp(PtrId idxPtrNum)
|
|
||||||
{
|
|
||||||
const Int out = mI->pp(idxPtrNum);
|
|
||||||
IB::mPos = mI->pos();
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
Int DIndex::mm(PtrId idxPtrNum)
|
|
||||||
{
|
|
||||||
const Int out = mI->mm(idxPtrNum);
|
|
||||||
IB::mPos = mI->pos();
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
SizeT DIndex::dim() const
|
SizeT DIndex::dim() const
|
||||||
{
|
{
|
||||||
return mI->dim();
|
return mI->dim();
|
||||||
|
|
|
@ -106,26 +106,6 @@ namespace CNORXZ
|
||||||
return DType();
|
return DType();
|
||||||
}
|
}
|
||||||
|
|
||||||
DType YIndex::operator->() const
|
|
||||||
{
|
|
||||||
assert(0);
|
|
||||||
return DType();
|
|
||||||
}
|
|
||||||
|
|
||||||
Int YIndex::pp(PtrId idxPtrNum)
|
|
||||||
{
|
|
||||||
assert(0);
|
|
||||||
// sub inds !!!
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Int YIndex::mm(PtrId idxPtrNum)
|
|
||||||
{
|
|
||||||
assert(0);
|
|
||||||
// sub inds !!!
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
SizeT YIndex::dim() const
|
SizeT YIndex::dim() const
|
||||||
{
|
{
|
||||||
return mRangePtr->dim();
|
return mRangePtr->dim();
|
||||||
|
|
|
@ -25,6 +25,19 @@ namespace
|
||||||
SizeT mSize;
|
SizeT mSize;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class UR_Test : public ::testing::Test
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
|
||||||
|
UR_Test()
|
||||||
|
{
|
||||||
|
mMeta = { "These", "are", "test", "strings", "foo", "bar", "baz" };
|
||||||
|
std::sort(mMeta.begin(), mMeta.end(), std::less<String>());
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector<String> mMeta;
|
||||||
|
};
|
||||||
|
|
||||||
TEST_F(CR_Test, Basics)
|
TEST_F(CR_Test, Basics)
|
||||||
{
|
{
|
||||||
auto cr = CRangeFactory(mSize).create();
|
auto cr = CRangeFactory(mSize).create();
|
||||||
|
@ -47,7 +60,8 @@ namespace
|
||||||
auto endxi = cr->end();
|
auto endxi = cr->end();
|
||||||
for(auto xi = cr->begin(); xi != endxi; ++xi){
|
for(auto xi = cr->begin(); xi != endxi; ++xi){
|
||||||
EXPECT_EQ(xi.pos(), cnt);
|
EXPECT_EQ(xi.pos(), cnt);
|
||||||
EXPECT_EQ(*xi, cnt);
|
EXPECT_TRUE(*xi == DType(cnt));
|
||||||
|
EXPECT_EQ((*xi).str(), std::to_string(cnt));
|
||||||
++cnt;
|
++cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,6 +72,38 @@ namespace
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(UR_Test, Basics)
|
||||||
|
{
|
||||||
|
auto ur = URangeFactory<String>(mMeta).create();
|
||||||
|
auto urx = std::dynamic_pointer_cast<URange<String>>(ur);
|
||||||
|
EXPECT_EQ(ur->size(), mMeta.size());
|
||||||
|
EXPECT_EQ(urx->size(), mMeta.size());
|
||||||
|
|
||||||
|
EXPECT_TRUE(urx->begin() != urx->end());
|
||||||
|
EXPECT_FALSE(urx->begin() == urx->end());
|
||||||
|
EXPECT_EQ(urx->begin().pos(), 0u);
|
||||||
|
EXPECT_EQ(urx->end().pos(), mMeta.size());
|
||||||
|
|
||||||
|
EXPECT_TRUE(ur->begin() != ur->end());
|
||||||
|
EXPECT_FALSE(ur->begin() == ur->end());
|
||||||
|
EXPECT_EQ(ur->begin().pos(), 0u);
|
||||||
|
EXPECT_EQ(ur->end().pos(), mMeta.size());
|
||||||
|
|
||||||
|
SizeT cnt = 0;
|
||||||
|
auto endxi = ur->end();
|
||||||
|
for(auto xi = ur->begin(); xi != endxi; ++xi){
|
||||||
|
EXPECT_EQ(xi.pos(), cnt);
|
||||||
|
EXPECT_TRUE(*xi == DType(mMeta[cnt]));
|
||||||
|
EXPECT_EQ((*xi).str(), mMeta[cnt]);
|
||||||
|
++cnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
SizeT cnt2 = 0;
|
||||||
|
for(auto x: *urx){
|
||||||
|
EXPECT_EQ(x, mMeta[cnt2++]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// UR_Test
|
// UR_Test
|
||||||
// RCast_Test
|
// RCast_Test
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue