summaryrefslogtreecommitdiffstats
path: root/src/layer-manager.cpp
diff options
context:
space:
mode:
authorMarc Jeanmougin <marc@jeanmougin.fr>2015-12-07 23:34:32 +0000
committerMarc Jeanmougin <marcjeanmougin@free.fr>2015-12-07 23:34:32 +0000
commit93650897c928bfa9ca9b737cfbff55c25271d5d3 (patch)
tree140edc7a4fdb7f1bc5944842a154681964243494 /src/layer-manager.cpp
parentupdate to trunk (no conflict) (diff)
downloadinkscape-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.cpp20
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;