#pragma once #include #include "GenericSlicer.h" namespace WaypointManager { template class ContainerType, class MissionItemList, class SettingsType> class GenericWaypointManager { public: typedef GenericSlicer Slicer; typedef ContainerType WaypointList; GenericWaypointManager() = delete; GenericWaypointManager(Slicer *slicer, SettingsType *settings); // Waypoint editing. void setWaypoints(const WaypointList &waypoints); void push_back (const WaypointType &wp); void push_front (const WaypointType &wp); void clear (); void insert (std::size_t i, const WaypointType &wp); std::size_t size () const; WaypointType &at (std::size_t i); const WaypointList &waypoints() const; const WaypointList &slice() const; const MissionItemList &missionItems() const; virtual bool update() = 0; virtual bool next() = 0; virtual bool previous() = 0; virtual bool reset() = 0; protected: WaypointList _waypoints; WaypointList _slice; MissionItemList _missionItems; Slicer *_slicer; SettingsType *_settings; }; template class ContainerType, class MissionItemList, class SettingsType> GenericWaypointManager::GenericWaypointManager( Slicer *slicer, SettingsType *Settings ) : _slicer(slicer) , _settings(_settings) {} template class ContainerType, class MissionItemList, class SettingsType> void GenericWaypointManager::push_back(const WaypointType &wp) { _waypoints.push_back(wp); } template class ContainerType, class MissionItemList, class SettingsType> void GenericWaypointManager::push_front( const WaypointType &wp) { _waypoints.push_front(wp); } template class ContainerType, class MissionItemList, class SettingsType> void GenericWaypointManager::clear() { _waypoints.clear(); } template class ContainerType, class MissionItemList, class SettingsType> void GenericWaypointManager::insert(std::size_t i, const WaypointType &wp) { _waypoints.insert(i, wp); } template class ContainerType, class MissionItemList, class SettingsType> std::size_t GenericWaypointManager::size() const { return _waypoints.size(); } template class ContainerType, class MissionItemList, class SettingsType> WaypointType & GenericWaypointManager::at(std::size_t i) { return _waypoints.at(i); } template class ContainerType, class MissionItemList, class SettingsType> const ContainerType &GenericWaypointManager::waypoints() const { return _waypoints; } template class ContainerType, class MissionItemList, class SettingsType> const ContainerType &GenericWaypointManager::slice() const { return _slice; } template class ContainerType, class MissionItemList, class SettingsType> const MissionItemList &GenericWaypointManager::missionItems() const { return _missionItems; } template class ContainerType, class MissionItemList, class SettingsType> void GenericWaypointManager::setWaypoints(const ContainerType &waypoints) { _waypoints = waypoints; } } // namespace WaypointManager