#ifndef MBGL_MAP_MAP_DATA #define MBGL_MAP_MAP_DATA #include #include #include #include #include #include #include #include #include namespace mbgl { class MapData { using Lock = std::lock_guard; public: inline MapData(MapMode mode_) : mode(mode_) { setAnimationTime(TimePoint::min()); setDefaultTransitionDuration(Duration::zero()); } // Adds the class if it's not yet set. Returns true when it added the class, and false when it // was already present. bool addClass(const std::string& klass); // Removes the class if it's present. Returns true when it remvoed the class, and false when it // was not present. bool removeClass(const std::string& klass); // Returns true when class is present in the list of currently set classes. bool hasClass(const std::string& klass) const; // Changes the list of currently set classes to the new list. void setClasses(const std::vector& klasses); // Returns a list of all currently set classes. std::vector getClasses() const; inline bool getDebug() const { return debug; } inline bool toggleDebug() { return debug ^= 1u; } inline void setDebug(bool value) { debug = value; } inline bool getCollisionDebug() const { return collisionDebug; } inline bool toggleCollisionDebug() { return collisionDebug ^= 1u; } inline void setCollisionDebug(bool value) { collisionDebug = value; } inline TimePoint getAnimationTime() const { // We're casting the TimePoint to and from a Duration because libstdc++ // has a bug that doesn't allow TimePoints to be atomic. return TimePoint(animationTime); } inline void setAnimationTime(TimePoint timePoint) { animationTime = timePoint.time_since_epoch(); }; inline Duration getDefaultTransitionDuration() const { return defaultTransitionDuration; } inline void setDefaultTransitionDuration(Duration duration) { defaultTransitionDuration = duration; }; public: AnnotationManager annotationManager; const MapMode mode; private: mutable std::mutex mtx; std::vector classes; std::atomic debug { false }; std::atomic collisionDebug { false }; std::atomic animationTime; std::atomic defaultTransitionDuration; // TODO: make private public: std::mutex mutexPause; std::condition_variable condPaused; std::condition_variable condResume; }; } #endif