cnorxz/src/single_range.h

88 lines
2 KiB
C
Raw Normal View History

2017-02-16 11:20:40 +01:00
// -*- C++ -*-
#ifndef __single_range_h__
#define __single_range_h__
#include <cstdlib>
#include <vector>
#include "base_def.h"
#include "index_base.h"
#include "range_base.h"
namespace MultiArrayTools
{
template <typename U, RangeType TYPE>
class SingleIndex : public IndexBase<SingleIndex<U,TYPE> >
{
public:
typedef IndexBase<SingleIndex<U,TYPE> > IB;
typedef IndefinitIndexBase IIB;
2017-02-16 11:20:40 +01:00
DEFAULT_MEMBERS(SingleIndex);
// find better solution !!!
2017-02-21 17:41:48 +01:00
SingleIndex(RangeBase<SingleIndex<U,TYPE> > const* range,
const U& upos, size_t disambig);
2017-02-21 17:41:48 +01:00
SingleIndex(RangeBase<SingleIndex<U,TYPE> > const* range,
size_t pos);
//virtual SingleIndex& operator=(const U& upos);
virtual SingleIndex& operator=(size_t pos) override;
virtual SingleIndex& operator++() override;
virtual SingleIndex& operator--() override;
virtual SingleIndex& operator+=(int n) override;
virtual SingleIndex& operator-=(int n) override;
virtual bool operator==(const SingleIndex& i);
virtual bool operator!=(const SingleIndex& i);
virtual MultiRangeType rangeType() const override;
2017-02-16 11:20:40 +01:00
virtual const U& getMetaPos() const;
virtual size_t dim() const override; // = 1
virtual void linkTo(IndefinitIndexBase* target) override;
2017-02-28 19:29:52 +01:00
virtual void copyPos(const SingleIndex& in) override;
virtual void eval() override;
virtual bool virt() const override { return false; }
2017-02-16 11:20:40 +01:00
protected:
virtual size_t evaluate(const SingleIndex& in) const override;
2017-02-16 11:20:40 +01:00
};
template <typename U, RangeType TYPE>
class SingleRange : public RangeBase<SingleIndex<U,TYPE> >
{
public:
DEFAULT_MEMBERS(SingleRange);
2017-02-16 16:06:23 +01:00
SingleRange(const std::vector<U>& space);
2017-02-16 16:06:23 +01:00
virtual size_t size() const override;
2017-02-16 11:20:40 +01:00
const U& get(size_t pos) const;
size_t get(const U& metaPos) const;
virtual MultiRangeType type() const override;
SingleIndex<U,TYPE> begin() const override;
SingleIndex<U,TYPE> end() const override;
2017-02-16 11:20:40 +01:00
protected:
std::vector<U> mSpace;
};
}
#include "single_range.cc"
#endif