/* Copyright 2015, Michele Santullo * This file is part of DoorKeeper. * * DoorKeeper is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * DoorKeeper is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with DoorKeeper. If not, see . */ #ifndef id6FB3FC97331449038D42AAAB4C01ABA1 #define id6FB3FC97331449038D42AAAB4C01ABA1 #include "doorkeeper/components/layer.hpp" #include "doorkeeper/components/exception.hpp" #include "doorkeeper/implem/idmanager.hpp" #include #include #include #include #include #include namespace dk { template class BaseMapSource; template class Tyler { typedef std::unique_ptr> LayerPtr; typedef std::vector LayerList; typedef IDManager<7, 9> LayerObsIDManager; public: typedef typename LayerBase::coords coords; typedef boost::indirect_iterator iterator; typedef boost::indirect_iterator const_iterator; typedef std::function&, bool) noexcept> layer_callback; typedef LayerObsIDManager::value_type LayerObsID; Tyler ( void ); Tyler ( Tyler&& ) = default; ~Tyler ( void ) noexcept = default; template Layer& push_layer ( BaseMapSource* parTilemap, int parIndex ); template void push_layer_void ( BaseMapSource* parTilemap, int parIndex ); iterator begin ( void ); const_iterator begin ( void ) const; iterator end ( void ); const_iterator end ( void ) const; void preload ( const coords& parFrom, const coords& parTo ); LayerObsID register_for_layeradd ( layer_callback parCallback ); void unregister_for_layeradd ( LayerObsID parID ); private: LayerObsIDManager m_layerobs_idmanager; LayerList m_layers; std::vector m_layerobs_callbacks; }; } //namespace dk #include "doorkeeper/implem/tyler.inl" #endif