summaryrefslogtreecommitdiff
path: root/src/mbgl/annotation/sprite_store.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/annotation/sprite_store.hpp')
-rw-r--r--src/mbgl/annotation/sprite_store.hpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/mbgl/annotation/sprite_store.hpp b/src/mbgl/annotation/sprite_store.hpp
new file mode 100644
index 0000000000..3e81a4daf0
--- /dev/null
+++ b/src/mbgl/annotation/sprite_store.hpp
@@ -0,0 +1,52 @@
+#ifndef MBGL_ANNOTATION_SPRITE_STORE
+#define MBGL_ANNOTATION_SPRITE_STORE
+
+#include <mbgl/annotation/sprite_image.hpp>
+
+#include <mbgl/util/noncopyable.hpp>
+#include <mbgl/util/geo.hpp>
+
+#include <map>
+#include <set>
+#include <vector>
+#include <memory>
+#include <mutex>
+#include <cstdint>
+
+namespace mbgl {
+
+// The SpriteStore object holds Sprite images.
+class SpriteStore : private util::noncopyable {
+ using Sprites = std::map<std::string, std::shared_ptr<const SpriteImage>>;
+
+public:
+ SpriteStore(const float ratio);
+
+ // Adds/replaces a Sprite image.
+ void setSprite(const std::string&, std::shared_ptr<const SpriteImage> = nullptr);
+
+ // Removes a Sprite.
+ void removeSprite(const std::string&);
+
+ // Obtains a Sprite image.
+ std::shared_ptr<const SpriteImage> getSprite(const std::string&);
+
+ // Returns Sprite images that changed since the last invocation of this function.
+ Sprites getDirty();
+
+private:
+ const float ratio;
+
+ // Lock for sprites and dirty maps.
+ std::mutex mutex;
+
+ // Stores all current sprites.
+ Sprites sprites;
+
+ // Stores all Sprite IDs that changed since the last invocation.
+ Sprites dirty;
+};
+
+} // namespace mbgl
+
+#endif