ArrayType.ixx
ArrayType
Download source code for Visual Studio 2022 from Github
ArrayType.ixx
#include "pch.h"
export module nodes:arraytype;
export class ArrayType {
protected:
constexpr int one_to_zero_based_array(int onebased) const
{
return onebased - 1;
}
constexpr int zero_to_one_based_array(int zerobased) const
{
return zerobased + 1;
}
public:
virtual int at(const int index) const = 0 ;
virtual std::unique_ptr<ArrayType> clone() = 0;
virtual int firstIndex() const = 0;
virtual int lastIndex(const int size) const = 0;
};
export class ZeroBasedArray : public ArrayType
{
public:
int at(const int index) const override
{
return index;
}
virtual std::unique_ptr<ArrayType> clone() override
{
return std::make_unique<ZeroBasedArray>();
}
virtual int firstIndex() const override
{
return 0;
}
virtual int lastIndex(const int size) const override
{
return size - 1;
}
};
export class OneBasedArray : public ArrayType
{
public:
int at(const int index) const override
{
return one_to_zero_based_array(index);
}
virtual std::unique_ptr<ArrayType> clone() override
{
return std::make_unique<OneBasedArray>();
}
virtual int firstIndex() const override
{
return 1;
}
virtual int lastIndex(const int size) const override
{
return size;
}
};