X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fcontainer-wrapper.hpp;h=bccb23ddaeaf05efc27c51985ddd5a67004ceaa9;hb=f74e820c5e8f81d6416f4557bce8b56ee6be4746;hp=09097e9358855977837eca2efd86f689f872ea29;hpb=6e11909ebb204e4a0f9651dc6c58f74c8376a094;p=lttng-tools.git diff --git a/src/common/container-wrapper.hpp b/src/common/container-wrapper.hpp index 09097e935..bccb23dda 100644 --- a/src/common/container-wrapper.hpp +++ b/src/common/container-wrapper.hpp @@ -24,10 +24,10 @@ namespace utils { */ template class random_access_container_wrapper { + template class _iterator : public std::iterator { public: - explicit _iterator(const random_access_container_wrapper& container, - std::size_t start_index = 0) : + explicit _iterator(IteratorContainerType& container, std::size_t start_index = 0) : _container(container), _index(start_index) { } @@ -68,23 +68,25 @@ class random_access_container_wrapper { return !(*this == other); } - typename std::conditional::value, - ElementType, - ElementType&>::type + typename std::conditional::value, + IteratorElementType, + IteratorElementType&>::type operator*() const noexcept { return _container[_index]; } private: - const random_access_container_wrapper& _container; + IteratorContainerType& _container; std::size_t _index; }; - using iterator = _iterator; + using iterator = _iterator; + using const_iterator = _iterator; public: - explicit random_access_container_wrapper(ContainerType container) : _container{ container } + explicit random_access_container_wrapper(ContainerType container) : + _container{ std::move(container) } { } @@ -98,6 +100,16 @@ public: return iterator(*this, ContainerOperations::size(_container)); } + const_iterator begin() const noexcept + { + return const_iterator(*this); + } + + const_iterator end() const noexcept + { + return const_iterator(*this, ContainerOperations::size(_container)); + } + std::size_t size() const noexcept { return ContainerOperations::size(_container); @@ -119,7 +131,7 @@ public: return ContainerOperations::get(_container, index); } -private: +protected: ContainerType _container; }; } /* namespace utils */