BS 0.0.1 制作迭代器与序列类接口
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
message("Convention: --- ----- ----- ----- ----- --")
|
message("Convention: --- ----- ----- ----- ----- --")
|
||||||
|
|
||||||
install(DIRECTORY [Runtime]
|
install(DIRECTORY [Runtime]
|
||||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/include
|
||||||
FILES_MATCHING PATTERN "*.*"
|
FILES_MATCHING PATTERN "*.*"
|
||||||
PATTERN "*.cpp" EXCLUDE)
|
PATTERN "*.cpp" EXCLUDE)
|
||||||
|
|
||||||
|
@@ -8,34 +8,56 @@ namespace Convention
|
|||||||
{
|
{
|
||||||
namespace Generics
|
namespace Generics
|
||||||
{
|
{
|
||||||
|
template<typename Element, typename Index = int, typename ReadValueType = Element&>
|
||||||
template<typename Element,typename ReadValueType = Element&>
|
struct ISequence
|
||||||
class ISequenceIterator
|
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
virtual ~ISequenceIterator() {}
|
|
||||||
virtual void Next() abstract;
|
|
||||||
virtual ReadValueType ReadValue() const abstract;
|
|
||||||
virtual decltype(auto) operator++()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
ReadValueType operator++(int) noexcept(noexcept(operator++))
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Element, typename SequenceIterator = ISequenceIterator<Element>>
|
|
||||||
class ISequence
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
using iterator = std::enable_if<std::is_base_of_v<ISequenceIterator<Element>, SequenceIterator>, SequenceIterator>;
|
|
||||||
virtual ~ISequence() {}
|
virtual ~ISequence() {}
|
||||||
virtual iterator begin() abstract;
|
virtual ReadValueType operator[](Index index) abstract;
|
||||||
virtual iterator end() abstract;
|
virtual Index size();
|
||||||
|
virtual Index GetBeginIndex() const abstract;
|
||||||
|
virtual Index GetEndIndex() const abstract;
|
||||||
|
virtual Index GetHeadIndex() const
|
||||||
|
{
|
||||||
|
return GetBeginIndex();
|
||||||
|
}
|
||||||
|
virtual Index GetTailIndex() const
|
||||||
|
{
|
||||||
|
return GetEndIndex() - 1;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace Iterator
|
||||||
|
{
|
||||||
|
template<typename Element, typename ReadValueType = Element&>
|
||||||
|
struct ISequenceIterator
|
||||||
|
{
|
||||||
|
virtual ~ISequenceIterator() {}
|
||||||
|
virtual void Next() abstract;
|
||||||
|
virtual ReadValueType ReadValue() const abstract;
|
||||||
|
virtual ISequenceIterator& operator++()
|
||||||
|
{
|
||||||
|
this->Next();
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
virtual bool operator==(const ISequenceIterator& other) const noexcept abstract;
|
||||||
|
bool operator!=(const ISequenceIterator& other) const noexcept
|
||||||
|
{
|
||||||
|
return !(*this == other);
|
||||||
|
}
|
||||||
|
ReadValueType operator*() const
|
||||||
|
{
|
||||||
|
return ReadValue();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename Element>
|
||||||
|
class DefaultSequenceIterator:public ISequenceIterator<Element>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DefaultSequenceIterator() {}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 序列容器枚举
|
* @brief 序列容器枚举
|
||||||
* @tparam Sequence 序列类型
|
* @tparam Sequence 序列类型
|
||||||
|
Reference in New Issue
Block a user