diff options
| author | Marc Jeanmougin <marc@jeanmougin.fr> | 2015-12-07 23:34:32 +0000 |
|---|---|---|
| committer | Marc Jeanmougin <marcjeanmougin@free.fr> | 2015-12-07 23:34:32 +0000 |
| commit | 93650897c928bfa9ca9b737cfbff55c25271d5d3 (patch) | |
| tree | 140edc7a4fdb7f1bc5944842a154681964243494 /src/layer-manager.cpp | |
| parent | update to trunk (no conflict) (diff) | |
| download | inkscape-93650897c928bfa9ca9b737cfbff55c25271d5d3.tar.gz inkscape-93650897c928bfa9ca9b737cfbff55c25271d5d3.zip | |
cppification : GHashMaps replaced by stl maps. getResouceList now gives a std::set<SPObject *>.
Should give some performance improvements (quite a few linear lookups are now logarithmic)
(bzr r14504.1.6)
Diffstat (limited to 'src/layer-manager.cpp')
| -rw-r--r-- | src/layer-manager.cpp | 20 |
1 files changed, 9 insertions, 11 deletions
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<Glib::ustring> currentNames; - GSList const *layers=_document->getResourceList("layer"); + std::set<SPObject *> layers = _document->getResourceList("layer"); SPObject *root=_desktop->currentRoot(); if ( root ) { - for ( GSList const *iter=layers ; iter ; iter = iter->next ) { - SPObject *layer=static_cast<SPObject *>(iter->data); - if ( layer != obj ) { - currentNames.insert( layer->label() ? Glib::ustring(layer->label()) : Glib::ustring() ); - } - } + std::set<SPObject *>::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<SPObject *> layers = _document->getResourceList("layer"); + SPObject *root=_desktop->currentRoot(); if ( root ) { _addOne(root); std::set<SPGroup*> layersToAdd; - for ( GSList const *iter = layers; iter; iter = iter->next ) { - SPObject *layer = static_cast<SPObject *>(iter->data); + for ( std::set<SPObject *>::const_iterator iter = layers.begin(); iter != layers.end(); ++iter ) { + SPObject *layer = *iter; // Debug::EventTracker<DebugLayerNote> tracker(Util::format("Examining %s", layer->label())); bool needsAdd = false; std::set<SPGroup*> 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<GSList *>(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; |
