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,33 +8,55 @@ 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 {
virtual ~ISequence() {}
virtual ReadValueType operator[](Index index) 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
{ {
public:
virtual ~ISequenceIterator() {} virtual ~ISequenceIterator() {}
virtual void Next() abstract; virtual void Next() abstract;
virtual ReadValueType ReadValue() const abstract; virtual ReadValueType ReadValue() const abstract;
virtual decltype(auto) operator++() virtual ISequenceIterator& operator++()
{ {
this->Next();
return *this;
} }
ReadValueType operator++(int) noexcept(noexcept(operator++)) 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, typename SequenceIterator = ISequenceIterator<Element>> template<typename Element>
class ISequence class DefaultSequenceIterator:public ISequenceIterator<Element>
{ {
public: public:
using iterator = std::enable_if<std::is_base_of_v<ISequenceIterator<Element>, SequenceIterator>, SequenceIterator>; DefaultSequenceIterator() {}
virtual ~ISequence() {}
virtual iterator begin() abstract;
virtual iterator end() abstract;
}; };
}
/** /**
* @brief 序列容器枚举 * @brief 序列容器枚举