// Copyright (C) 2020 Jérôme Leclercq // This file is part of the "Nazara Engine - Graphics module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_RENDERQUEUE_HPP #define NAZARA_RENDERQUEUE_HPP #include #include #include namespace Nz { class RenderQueueInternal { public: using Index = Nz::UInt64; RenderQueueInternal() = default; RenderQueueInternal(const RenderQueueInternal&) = default; RenderQueueInternal(RenderQueueInternal&&) = default; ~RenderQueueInternal() = default; RenderQueueInternal& operator=(const RenderQueueInternal&) = default; RenderQueueInternal& operator=(RenderQueueInternal&&) = default; protected: using RenderDataPair = std::pair; void Sort(); std::vector m_orderedRenderQueue; }; template class RenderQueue : public RenderQueueInternal { public: class const_iterator; friend const_iterator; using size_type = std::size_t; RenderQueue() = default; RenderQueue(const RenderQueue&) = default; RenderQueue(RenderQueue&&) noexcept = default; ~RenderQueue() = default; void Clear(); void Insert(RenderData&& data); template void Sort(IndexFunc&& func); // STL API inline const_iterator begin() const; inline bool empty() const; inline const_iterator end() const; inline size_type size() const; RenderQueue& operator=(const RenderQueue&) = default; RenderQueue& operator=(RenderQueue&&) noexcept = default; private: const RenderData& GetData(std::size_t i) const; std::vector m_data; }; template class RenderQueue::const_iterator : public std::iterator { friend RenderQueue; public: const_iterator(const const_iterator& it); const RenderData& operator*() const; const_iterator& operator=(const const_iterator& it); const_iterator& operator++(); const_iterator operator++(int); bool operator==(const const_iterator& rhs) const; bool operator!=(const const_iterator& rhs) const; void swap(const_iterator& rhs); private: const_iterator(const RenderQueue* queue, std::size_t nextId); std::size_t m_nextDataId; const RenderQueue* m_queue; }; } #include #endif // NAZARA_RENDERQUEUE_HPP