BS 0.0.1 制作迭代器与序列类接口

This commit is contained in:
2025-06-13 11:14:05 +08:00
parent 627dfca10d
commit 7c7e337e1b
2 changed files with 47 additions and 25 deletions

View File

@@ -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)

View File

@@ -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 序列类型