From d2faca1861e0cca4e08224969280778e2e3e71a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Fri, 20 Mar 2015 19:46:52 +0100 Subject: [PATCH] move style classes to MapData object and make thread safe --- include/mbgl/map/map.hpp | 3 +-- src/mbgl/map/map.cpp | 40 +++++++++++++---------------------- src/mbgl/map/map_data.cpp | 44 +++++++++++++++++++++++++++++++++++++++ src/mbgl/map/map_data.hpp | 20 ++++++++++++++++++ 4 files changed, 80 insertions(+), 27 deletions(-) create mode 100644 src/mbgl/map/map_data.cpp diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp index d18df67a0..e5eabdac4 100644 --- a/include/mbgl/map/map.hpp +++ b/include/mbgl/map/map.hpp @@ -82,6 +82,7 @@ public: StyleInfo = 1 << 0, Debug = 1 << 1, DefaultTransitionDuration = 1 << 2, + Classes = 1 << 3, }; void triggerUpdate(Update = Update::Nothing); @@ -251,8 +252,6 @@ private: const std::unique_ptr data; - std::vector classes; - std::set> activeSources; std::atomic updated; diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index c57ed3dfb..1473346a3 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -609,43 +609,28 @@ std::chrono::steady_clock::time_point Map::getTime() const { } void Map::addClass(const std::string& klass) { - if (hasClass(klass)) return; - classes.push_back(klass); - if (style) { - style->cascadeClasses(classes); - if (style->hasTransitions()) { - triggerUpdate(); - } + if (data->addClass(klass)) { + triggerUpdate(Update::Classes); } } void Map::removeClass(const std::string& klass) { - if (!hasClass(klass)) return; - classes.erase(std::remove(classes.begin(), classes.end(), klass), classes.end()); - if (style) { - style->cascadeClasses(classes); - if (style->hasTransitions()) { - triggerUpdate(); - } + if (data->removeClass(klass)) { + triggerUpdate(Update::Classes); } } -void Map::setClasses(const std::vector& classes_) { - classes = classes_; - if (style) { - style->cascadeClasses(classes); - if (style->hasTransitions()) { - triggerUpdate(); - } - } +void Map::setClasses(const std::vector& classes) { + data->setClasses(classes); + triggerUpdate(Update::Classes); } bool Map::hasClass(const std::string& klass) const { - return std::find(classes.begin(), classes.end(), klass) != classes.end(); + return data->hasClass(klass); } std::vector Map::getClasses() const { - return classes; + return data->getClasses(); } void Map::setDefaultTransitionDuration(std::chrono::steady_clock::duration duration) { @@ -753,7 +738,7 @@ void Map::loadStyleJSON(const std::string& json, const std::string& base) { style = std::make_shared