From 93650897c928bfa9ca9b737cfbff55c25271d5d3 Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Tue, 8 Dec 2015 00:34:32 +0100 Subject: cppification : GHashMaps replaced by stl maps. getResouceList now gives a std::set. Should give some performance improvements (quite a few linear lookups are now logarithmic) (bzr r14504.1.6) --- src/layer-manager.cpp | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'src/layer-manager.cpp') diff --git a/src/layer-manager.cpp b/src/layer-manager.cpp index 3bbc831d5..5dae5f20a 100644 --- a/src/layer-manager.cpp +++ b/src/layer-manager.cpp @@ -191,15 +191,12 @@ Glib::ustring LayerManager::getNextLayerName( SPObject* obj, gchar const *label) } std::set currentNames; - GSList const *layers=_document->getResourceList("layer"); + std::set layers = _document->getResourceList("layer"); SPObject *root=_desktop->currentRoot(); if ( root ) { - for ( GSList const *iter=layers ; iter ; iter = iter->next ) { - SPObject *layer=static_cast(iter->data); - if ( layer != obj ) { - currentNames.insert( layer->label() ? Glib::ustring(layer->label()) : Glib::ustring() ); - } - } + std::set::iterator iter = layers.find(obj); + if (iter != layers.end()) + currentNames.insert( (*iter)->label() ? Glib::ustring((*iter)->label()) : Glib::ustring() ); } // Not sure if we need to cap it, but we'll just be paranoid for the moment @@ -262,15 +259,16 @@ void LayerManager::_rebuild() { if (!_document) // http://sourceforge.net/mailarchive/forum.php?thread_name=5747bce9a7ed077c1b4fc9f0f4f8a5e0%40localhost&forum_name=inkscape-devel return; - GSList const *layers = _document->getResourceList("layer"); + std::set layers = _document->getResourceList("layer"); + SPObject *root=_desktop->currentRoot(); if ( root ) { _addOne(root); std::set layersToAdd; - for ( GSList const *iter = layers; iter; iter = iter->next ) { - SPObject *layer = static_cast(iter->data); + for ( std::set::const_iterator iter = layers.begin(); iter != layers.end(); ++iter ) { + SPObject *layer = *iter; // Debug::EventTracker tracker(Util::format("Examining %s", layer->label())); bool needsAdd = false; std::set additional; @@ -282,7 +280,7 @@ void LayerManager::_rebuild() { SPGroup* group = SP_GROUP(curr); if ( group->layerMode() == SPGroup::LAYER ) { // If we have a layer-group as the one or a parent, ensure it is listed as a valid layer. - needsAdd &= ( g_slist_find(const_cast(layers), curr) != NULL ); + needsAdd &= ( layers.find(curr) != layers.end() ); // XML Tree being used here directly while it shouldn't be... if ( (!(group->getRepr())) || (!(group->getRepr()->parent())) ) { needsAdd = false; -- cgit v1.2.3 From 743c2ecacf5abf06b43ce05f8107e6f00230c942 Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Sun, 13 Dec 2015 23:57:10 +0100 Subject: fix minor bug from recent merge: layer names were incorrectly created (bzr r14530) --- src/layer-manager.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/layer-manager.cpp') diff --git a/src/layer-manager.cpp b/src/layer-manager.cpp index 5dae5f20a..c0fe95dd7 100644 --- a/src/layer-manager.cpp +++ b/src/layer-manager.cpp @@ -194,9 +194,10 @@ Glib::ustring LayerManager::getNextLayerName( SPObject* obj, gchar const *label) std::set layers = _document->getResourceList("layer"); SPObject *root=_desktop->currentRoot(); if ( root ) { - std::set::iterator iter = layers.find(obj); - if (iter != layers.end()) + for (std::set::const_iterator iter = layers.begin(); iter != layers.end(); ++iter) { + if (*iter != obj) currentNames.insert( (*iter)->label() ? Glib::ustring((*iter)->label()) : Glib::ustring() ); + } } // Not sure if we need to cap it, but we'll just be paranoid for the moment -- cgit v1.2.3