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:
|
|
|
|
|
|
|
|
DEFAULT_MEMBERS(SingleIndex);
|
|
|
|
|
2017-02-16 16:06:23 +01:00
|
|
|
virtual SingleIndex& operator=(const U& upos);
|
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;
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual size_t evaluate(const Index& in) const override;
|
|
|
|
};
|
|
|
|
|
|
|
|
template <typename U, RangeType TYPE>
|
|
|
|
class SingleRange : public RangeBase<SingleIndex<U,TYPE> >
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
DEFAULT_MEMBERS(SingleRange);
|
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;
|
|
|
|
|
|
|
|
protected:
|
|
|
|
std::vector<U> mSpace;
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#include "single_range.cc"
|
|
|
|
|
|
|
|
#endif
|