2 #ifndef DALI_TOOLKIT_INTERNAL_ROUND_ROBIN_CONTAINER_VIEW_H
3 #define DALI_TOOLKIT_INTERNAL_ROUND_ROBIN_CONTAINER_VIEW_H
6 * Copyright (c) 2017 Samsung Electronics Co., Ltd.
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
36 * @brief RoundRobinContainerView is a view to a container that allows iterating through the elements cyclically.
39 class RoundRobinContainerView
42 using ContainerType = std::vector<T>;
45 * @brief Constructs a new RoundRobinControlView with the given number elements using the provided factory.
46 * @param[in] numberOfElements The number of elements in the container
47 * @param[in] factory Factory function of functor that will be used to create instances of the elements
49 template<typename FactoryType>
50 RoundRobinContainerView(size_t numberOfElements, const FactoryType& factory)
54 mElements.reserve(numberOfElements);
55 for(unsigned i = {}; i < numberOfElements; ++i)
57 mElements.push_back(factory());
62 * @brief Reset the position of the iterator returned by GetNext() to the first element.
70 * @brief Returns the next element on the container.
71 * @return Iterator for the next element
73 typename ContainerType::iterator GetNext()
77 return mElements.begin() + mNextIndex++;
81 * @brief Returns the iterator to the end of the container.
83 * Can be used to compare against GetNext() to check if the container is empty.
85 * @return The container end() element
87 typename ContainerType::const_iterator End() const
89 return mElements.cend();
93 ~RoundRobinContainerView() = default;
95 RoundRobinContainerView(const RoundRobinContainerView&) = delete;
96 RoundRobinContainerView& operator=(const RoundRobinContainerView&) = delete;
97 RoundRobinContainerView(RoundRobinContainerView&&) = default;
98 RoundRobinContainerView& operator=(RoundRobinContainerView&&) = default;
102 * @brief Check the current index and reset if necessary.
104 void SetValidNextIndex()
106 if(mNextIndex >= mElements.size())
113 ContainerType mElements; //< container of elements
114 size_t mNextIndex; //< index to the next element to be viewed
117 } // namespace Internal
119 } // namespace Toolkit
124 #endif // DALI_TOOLKIT_INTERNAL_ROUND_ROBIN_CONTAINER_VIEW_H