diff --git a/Convention/CMakeLists.txt b/Convention/CMakeLists.txt index 1b1bb4b..b040b06 100644 --- a/Convention/CMakeLists.txt +++ b/Convention/CMakeLists.txt @@ -1,7 +1,7 @@ message("Convention: --- ----- ----- ----- ----- --") install(DIRECTORY [Runtime] - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + DESTINATION ${CMAKE_INSTALL_PREFIX}/include FILES_MATCHING PATTERN "*.*" PATTERN "*.cpp" EXCLUDE) diff --git a/Convention/[Runtime]/Generics/Sequence.hpp b/Convention/[Runtime]/Generics/Sequence.hpp index 62000ea..ceeaa95 100644 --- a/Convention/[Runtime]/Generics/Sequence.hpp +++ b/Convention/[Runtime]/Generics/Sequence.hpp @@ -8,34 +8,56 @@ namespace Convention { namespace Generics { - - template - class ISequenceIterator + template + struct ISequence { - public: - virtual ~ISequenceIterator() {} - virtual void Next() abstract; - virtual ReadValueType ReadValue() const abstract; - virtual decltype(auto) operator++() - { - - } - ReadValueType operator++(int) noexcept(noexcept(operator++)) - { - - } - }; - - template> - class ISequence - { - public: - using iterator = std::enable_if, SequenceIterator>, SequenceIterator>; virtual ~ISequence() {} - virtual iterator begin() abstract; - virtual iterator end() abstract; + 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 + 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 + class DefaultSequenceIterator:public ISequenceIterator + { + public: + DefaultSequenceIterator() {} + }; + } + /** * @brief 序列容器枚举 * @tparam Sequence 序列类型