From 33a3388ccd07168da8169f5653d40d4ee623cf8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Wed, 24 Jun 2015 18:16:18 +0200 Subject: [PATCH] add API for adding multiple sprites at once --- src/mbgl/annotation/sprite_store.cpp | 7 +++++ src/mbgl/annotation/sprite_store.hpp | 3 +++ test/annotations/sprite_store.cpp | 40 ++++++++++++++++++++-------- 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/src/mbgl/annotation/sprite_store.cpp b/src/mbgl/annotation/sprite_store.cpp index 270348aba..6a474151c 100644 --- a/src/mbgl/annotation/sprite_store.cpp +++ b/src/mbgl/annotation/sprite_store.cpp @@ -30,6 +30,13 @@ void SpriteStore::_setSprite(const std::string& name, } } +void SpriteStore::setSprites(const Sprites& newSprites) { + std::lock_guard lock(mutex); + for (const auto& pair : newSprites) { + _setSprite(pair.first, pair.second); + } +} + void SpriteStore::removeSprite(const std::string& name) { std::lock_guard lock(mutex); _setSprite(name); diff --git a/src/mbgl/annotation/sprite_store.hpp b/src/mbgl/annotation/sprite_store.hpp index 80ea6bbe7..ffd795280 100644 --- a/src/mbgl/annotation/sprite_store.hpp +++ b/src/mbgl/annotation/sprite_store.hpp @@ -25,6 +25,9 @@ public: // Adds/replaces a Sprite image. void setSprite(const std::string&, std::shared_ptr = nullptr); + // Adds/replaces mutliple Sprite images. + void setSprites(const Sprites& sprites); + // Removes a Sprite. void removeSprite(const std::string&); diff --git a/test/annotations/sprite_store.cpp b/test/annotations/sprite_store.cpp index b22c46be4..ff34a94b5 100644 --- a/test/annotations/sprite_store.cpp +++ b/test/annotations/sprite_store.cpp @@ -16,26 +16,27 @@ TEST(Annotations, SpriteStore) { // Adding single store.setSprite("one", sprite1); EXPECT_EQ(Sprites({ - { "one", sprite1 }, - }), store.getDirty()); + { "one", sprite1 }, + }), + store.getDirty()); EXPECT_EQ(Sprites(), store.getDirty()); // Adding multiple store.setSprite("two", sprite2); store.setSprite("three", sprite3); EXPECT_EQ(Sprites({ - { "two", sprite2 }, - { "three", sprite3 }, - }), store.getDirty()); + { "two", sprite2 }, { "three", sprite3 }, + }), + store.getDirty()); EXPECT_EQ(Sprites(), store.getDirty()); // Removing store.removeSprite("one"); store.removeSprite("two"); EXPECT_EQ(Sprites({ - { "one", nullptr }, - { "two", nullptr }, - }), store.getDirty()); + { "one", nullptr }, { "two", nullptr }, + }), + store.getDirty()); EXPECT_EQ(Sprites(), store.getDirty()); // Accessing @@ -46,12 +47,12 @@ TEST(Annotations, SpriteStore) { // Overwriting store.setSprite("three", sprite1); EXPECT_EQ(Sprites({ - { "three", sprite1 }, - }), store.getDirty()); + { "three", sprite1 }, + }), + store.getDirty()); EXPECT_EQ(Sprites(), store.getDirty()); } - TEST(Annotations, SpriteStoreWrongPixelRatio) { FixtureLog log; @@ -71,3 +72,20 @@ TEST(Annotations, SpriteStoreWrongPixelRatio) { "Sprite image has wrong pixel ratio", })); } + +TEST(Annotations, SpriteStoreMultiple) { + const auto sprite1 = std::make_shared(8, 8, 2, std::string(16 * 16 * 4, '\0')); + const auto sprite2 = std::make_shared(8, 8, 2, std::string(16 * 16 * 4, '\0')); + + using Sprites = std::map>; + SpriteStore store(2); + + store.setSprites({ + { "one", sprite1 }, { "two", sprite2 }, + }); + EXPECT_EQ(Sprites({ + { "one", sprite1 }, { "two", sprite2 }, + }), + store.getDirty()); + EXPECT_EQ(Sprites(), store.getDirty()); +}