From a7f2b2ba3f13ceb60376802f4a31e104153839e8 Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Tue, 17 Feb 2015 03:00:37 +0100 Subject: At first, I was thinking "I just have to go to the selection file, and change that GSList* with a std::list, then resolve the few problems" So, i tried that. And I will continue tomorrow, and the days after, on and on. (bzr r13922.1.1) --- src/selection.cpp | 159 +++++++++++++++++++++++++----------------------------- 1 file changed, 73 insertions(+), 86 deletions(-) (limited to 'src/selection.cpp') diff --git a/src/selection.cpp b/src/selection.cpp index 81139d044..b509f4272 100644 --- a/src/selection.cpp +++ b/src/selection.cpp @@ -42,9 +42,9 @@ namespace Inkscape { Selection::Selection(LayerModel *layers, SPDesktop *desktop) : - _objs(NULL), - _reprs(NULL), - _items(NULL), + _objs(SelContainer()), + _reprs(SelContainer()), + _items(SelContainer()), _layers(layers), _desktop(desktop), _selection_context(NULL), @@ -121,17 +121,14 @@ Selection::_releaseContext(SPObject *obj) } void Selection::_invalidateCachedLists() { - g_slist_free(_items); - _items = NULL; - - g_slist_free(_reprs); - _reprs = NULL; + _items.clear(); + _reprs.clear(); } void Selection::_clear() { _invalidateCachedLists(); - while (_objs) { - SPObject *obj=reinterpret_cast(_objs->data); + while (!_objs.empty()) { + SPObject *obj=reinterpret_cast(_objs.front()); _remove(obj); } } @@ -148,7 +145,7 @@ bool Selection::includes(SPObject *obj) const { g_return_val_if_fail(SP_IS_OBJECT(obj), FALSE); - return ( g_slist_find(_objs, obj) != NULL ); + return ( find(_objs.begin(),_objs.end(),obj)!=_objs.end() ); } void Selection::add(SPObject *obj, bool persist_selection_context/* = false */) { @@ -180,7 +177,7 @@ void Selection::_add(SPObject *obj) { _removeObjectDescendants(obj); _removeObjectAncestors(obj); - _objs = g_slist_prepend(_objs, obj); + _objs.push_front(obj); add_3D_boxes_recursively(obj); @@ -234,26 +231,26 @@ void Selection::_remove(SPObject *obj) { remove_3D_boxes_recursively(obj); - _objs = g_slist_remove(_objs, obj); + _objs.remove(obj); } -void Selection::setList(GSList const *list) { +void Selection::setList(SelContainer const &list) { // Clear and add, or just clear with emit. - if (list != NULL) { + if (!list.empty()) { _clear(); addList(list); } else clear(); } -void Selection::addList(GSList const *list) { +void Selection::addList(SelContainer const &list) { - if (list == NULL) + if (list.empty()) return; _invalidateCachedLists(); - for ( GSList const *iter = list ; iter != NULL ; iter = iter->next ) { - SPObject *obj = reinterpret_cast(iter->data); + for ( SelContainer::const_iterator iter=list.begin();iter!=list.end();iter++ ) { + SPObject *obj = reinterpret_cast(*iter); if (includes(obj)) continue; _add (obj); } @@ -261,11 +258,11 @@ void Selection::addList(GSList const *list) { _emitChanged(); } -void Selection::setReprList(GSList const *list) { +void Selection::setReprList(SelContainer const &list) { _clear(); - for ( GSList const *iter = list ; iter != NULL ; iter = iter->next ) { - SPObject *obj=_objectForXMLNode(reinterpret_cast(iter->data)); + for ( SelContainer::const_iterator iter=list.begin();iter!=list.end();iter++ ) { + SPObject *obj=_objectForXMLNode(reinterpret_cast(*iter)); if (obj) { _add(obj); } @@ -279,34 +276,34 @@ void Selection::clear() { _emitChanged(); } -GSList const *Selection::list() { +SelContainer const &Selection::list() { return _objs; } -GSList const *Selection::itemList() { - if (_items) { +SelContainer const &Selection::itemList() { + if (!_items.empty()) { return _items; } - for ( GSList const *iter=_objs ; iter != NULL ; iter = iter->next ) { - SPObject *obj=reinterpret_cast(iter->data); + for ( SelContainer::const_iterator iter=_objs.begin();iter!=_objs.end();iter++ ) { + SPObject *obj=reinterpret_cast(*iter); if (SP_IS_ITEM(obj)) { - _items = g_slist_prepend(_items, SP_ITEM(obj)); + _items.push_front(SP_ITEM(obj)); } } - _items = g_slist_reverse(_items); + _items.reverse(); return _items; } -GSList const *Selection::reprList() { - if (_reprs) { return _reprs; } - - for ( GSList const *iter=itemList() ; iter != NULL ; iter = iter->next ) { - SPObject *obj=reinterpret_cast(iter->data); - _reprs = g_slist_prepend(_reprs, obj->getRepr()); +SelContainer const &Selection::reprList() { + if (!_reprs.empty()) { return _reprs; } + SelContainer list = itemList(); + for ( SelContainer::const_iterator iter=list.begin();iter!=list.end();iter++ ) { + SPObject *obj=reinterpret_cast(*iter); + _reprs.push_front(dynamic_cast(obj->getRepr())); } - _reprs = g_slist_reverse(_reprs); + _reprs.reverse(); return _reprs; } @@ -337,17 +334,17 @@ std::list const Selection::box3DList(Persp3D *persp) { } SPObject *Selection::single() { - if ( _objs != NULL && _objs->next == NULL ) { - return reinterpret_cast(_objs->data); + if ( _objs.size() == 1 ) { + return reinterpret_cast(_objs.front()); } else { return NULL; } } SPItem *Selection::singleItem() { - GSList const *items=itemList(); - if ( items != NULL && items->next == NULL ) { - return reinterpret_cast(items->data); + SelContainer const items=itemList(); + if ( !items.size()==1) { + return reinterpret_cast(items.front()); } else { return NULL; } @@ -362,12 +359,12 @@ SPItem *Selection::largestItem(Selection::CompareSize compare) { } SPItem *Selection::_sizeistItem(bool sml, Selection::CompareSize compare) { - GSList const *items = const_cast(this)->itemList(); + SelContainer const items = const_cast(this)->itemList(); gdouble max = sml ? 1e18 : 0; SPItem *ist = NULL; - for ( GSList const *i = items; i != NULL ; i = i->next ) { - Geom::OptRect obox = SP_ITEM(i->data)->desktopPreferredBounds(); + for ( SelContainer::const_iterator i=items.begin();i!=items.end();i++ ) { + Geom::OptRect obox = SP_ITEM(*i)->desktopPreferredBounds(); if (!obox || obox.isEmpty()) continue; Geom::Rect bbox = *obox; @@ -376,7 +373,7 @@ SPItem *Selection::_sizeistItem(bool sml, Selection::CompareSize compare) { size = sml ? size : size * -1; if (size < max) { max = size; - ist = SP_ITEM(i->data); + ist = SP_ITEM(*i); } } return ist; @@ -395,22 +392,22 @@ Geom::OptRect Selection::bounds(SPItem::BBoxType type) const Geom::OptRect Selection::geometricBounds() const { - GSList const *items = const_cast(this)->itemList(); + SelContainer const items = const_cast(this)->itemList(); Geom::OptRect bbox; - for ( GSList const *i = items ; i != NULL ; i = i->next ) { - bbox.unionWith(SP_ITEM(i->data)->desktopGeometricBounds()); + for ( SelContainer::const_iterator iter=items.begin();iter!=items.end();iter++ ) { + bbox.unionWith(SP_ITEM(*iter)->desktopGeometricBounds()); } return bbox; } Geom::OptRect Selection::visualBounds() const { - GSList const *items = const_cast(this)->itemList(); + SelContainer const items = const_cast(this)->itemList(); Geom::OptRect bbox; - for ( GSList const *i = items ; i != NULL ; i = i->next ) { - bbox.unionWith(SP_ITEM(i->data)->desktopVisualBounds()); + for ( SelContainer::const_iterator iter=items.begin();iter!=items.end();iter++ ) { + bbox.unionWith(SP_ITEM(*iter)->desktopVisualBounds()); } return bbox; } @@ -427,11 +424,11 @@ Geom::OptRect Selection::preferredBounds() const Geom::OptRect Selection::documentBounds(SPItem::BBoxType type) const { Geom::OptRect bbox; - GSList const *items = const_cast(this)->itemList(); - if (!items) return bbox; + SelContainer const items = const_cast(this)->itemList(); + if (items.empty()) return bbox; - for ( GSList const *iter=items ; iter != NULL ; iter = iter->next ) { - SPItem *item = SP_ITEM(iter->data); + for ( SelContainer::const_iterator iter=items.begin();iter!=items.end();iter++ ) { + SPItem *item = SP_ITEM(*iter); bbox |= item->documentBounds(type); } @@ -441,9 +438,9 @@ Geom::OptRect Selection::documentBounds(SPItem::BBoxType type) const // If we have a selection of multiple items, then the center of the first item // will be returned; this is also the case in SelTrans::centerRequest() boost::optional Selection::center() const { - GSList *items = (GSList *) const_cast(this)->itemList(); - if (items) { - SPItem *first = reinterpret_cast(g_slist_last(items)->data); // from the first item in selection + SelContainer const items = const_cast(this)->itemList(); + if (!items.empty()) { + SPItem *first = reinterpret_cast(items.back()); // from the first item in selection if (first->isCenterSet()) { // only if set explicitly return first->getCenter(); } @@ -457,13 +454,13 @@ boost::optional Selection::center() const { } std::vector Selection::getSnapPoints(SnapPreferences const *snapprefs) const { - GSList const *items = const_cast(this)->itemList(); + SelContainer const items = const_cast(this)->itemList(); SnapPreferences snapprefs_dummy = *snapprefs; // create a local copy of the snapping prefs snapprefs_dummy.setTargetSnappable(Inkscape::SNAPTARGET_ROTATION_CENTER, false); // locally disable snapping to the item center std::vector p; - for (GSList const *iter = items; iter != NULL; iter = iter->next) { - SPItem *this_item = SP_ITEM(iter->data); + for ( SelContainer::const_iterator iter=items.begin();iter!=items.end();iter++ ) { + SPItem *this_item = SP_ITEM(*iter); this_item->getSnappoints(p, &snapprefs_dummy); //Include the transformation origin for snapping @@ -477,10 +474,8 @@ std::vector Selection::getSnapPoints(SnapPreferenc } void Selection::_removeObjectDescendants(SPObject *obj) { - GSList *iter, *next; - for ( iter = _objs ; iter ; iter = next ) { - next = iter->next; - SPObject *sel_obj=reinterpret_cast(iter->data); + for ( SelContainer::const_iterator iter=_objs.begin();iter!=_objs.end();iter++ ) { + SPObject *sel_obj=reinterpret_cast(*iter); SPObject *parent = sel_obj->parent; while (parent) { if ( parent == obj ) { @@ -511,32 +506,24 @@ SPObject *Selection::_objectForXMLNode(Inkscape::XML::Node *repr) const { return object; } -guint Selection::numberOfLayers() { - GSList const *items = const_cast(this)->itemList(); - GSList *layers = NULL; - for (GSList const *iter = items; iter != NULL; iter = iter->next) { - SPObject *layer = _layers->layerForObject(SP_OBJECT(iter->data)); - if (g_slist_find (layers, layer) == NULL) { - layers = g_slist_prepend (layers, layer); - } +uint Selection::numberOfLayers() { + SelContainer const items = const_cast(this)->itemList(); + std::set layers; + for ( SelContainer::const_iterator iter=items.begin();iter!=items.end();iter++ ) { + SPObject *layer = _layers->layerForObject(SP_OBJECT(*iter)); + layers.insert(layer); } - guint ret = g_slist_length (layers); - g_slist_free (layers); - return ret; + return layers.size(); } guint Selection::numberOfParents() { - GSList const *items = const_cast(this)->itemList(); - GSList *parents = NULL; - for (GSList const *iter = items; iter != NULL; iter = iter->next) { - SPObject *parent = SP_OBJECT(iter->data)->parent; - if (g_slist_find (parents, parent) == NULL) { - parents = g_slist_prepend (parents, parent); - } + SelContainer const items = const_cast(this)->itemList(); + std::set parents; + for ( SelContainer::const_iterator iter=items.begin();iter!=items.end();iter++ ) { + SPObject *parent = SP_OBJECT(*iter)->parent; + parents.insert(parent); } - guint ret = g_slist_length (parents); - g_slist_free (parents); - return ret; + return parents.size(); } } -- cgit v1.2.3 From 9e21d00fb1053897420f80d05a9815c5b2bbf312 Mon Sep 17 00:00:00 2001 From: mc <> Date: Wed, 18 Feb 2015 11:25:23 +0100 Subject: I can't really understand why, but i can now launch inkscape without it segfaulting. That's an improvement. Next thing: code cleaning, replacing containers with vectors (bzr r13922.1.4) --- src/selection.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'src/selection.cpp') diff --git a/src/selection.cpp b/src/selection.cpp index b509f4272..cbde9a799 100644 --- a/src/selection.cpp +++ b/src/selection.cpp @@ -43,7 +43,7 @@ namespace Inkscape { Selection::Selection(LayerModel *layers, SPDesktop *desktop) : _objs(SelContainer()), - _reprs(SelContainer()), + _reprs(std::vector()), _items(SelContainer()), _layers(layers), _desktop(desktop), @@ -296,15 +296,13 @@ SelContainer const &Selection::itemList() { return _items; } -SelContainer const &Selection::reprList() { +std::vector const &Selection::reprList() { if (!_reprs.empty()) { return _reprs; } SelContainer list = itemList(); for ( SelContainer::const_iterator iter=list.begin();iter!=list.end();iter++ ) { SPObject *obj=reinterpret_cast(*iter); - _reprs.push_front(dynamic_cast(obj->getRepr())); + _reprs.push_back(obj->getRepr()); } - _reprs.reverse(); - return _reprs; } @@ -343,7 +341,7 @@ SPObject *Selection::single() { SPItem *Selection::singleItem() { SelContainer const items=itemList(); - if ( !items.size()==1) { + if ( items.size()==1) { return reinterpret_cast(items.front()); } else { return NULL; -- cgit v1.2.3 From 5fd00cab14d48beaf2279a2b8f3ad5b02b76c87b Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Thu, 19 Feb 2015 04:25:21 +0100 Subject: Put a few std::vector (bzr r13922.1.5) --- src/selection.cpp | 56 +++++++++++++++++++++++++++---------------------------- 1 file changed, 27 insertions(+), 29 deletions(-) (limited to 'src/selection.cpp') diff --git a/src/selection.cpp b/src/selection.cpp index cbde9a799..2e8251048 100644 --- a/src/selection.cpp +++ b/src/selection.cpp @@ -44,7 +44,7 @@ namespace Inkscape { Selection::Selection(LayerModel *layers, SPDesktop *desktop) : _objs(SelContainer()), _reprs(std::vector()), - _items(SelContainer()), + _items(std::vector()), _layers(layers), _desktop(desktop), _selection_context(NULL), @@ -234,7 +234,7 @@ void Selection::_remove(SPObject *obj) { _objs.remove(obj); } -void Selection::setList(SelContainer const &list) { +void Selection::setList(std::vector const &list) { // Clear and add, or just clear with emit. if (!list.empty()) { _clear(); @@ -242,14 +242,14 @@ void Selection::setList(SelContainer const &list) { } else clear(); } -void Selection::addList(SelContainer const &list) { +void Selection::addList(std::vector const &list) { if (list.empty()) return; _invalidateCachedLists(); - for ( SelContainer::const_iterator iter=list.begin();iter!=list.end();iter++ ) { + for ( std::vector::const_iterator iter=list.begin();iter!=list.end();iter++ ) { SPObject *obj = reinterpret_cast(*iter); if (includes(obj)) continue; _add (obj); @@ -258,11 +258,11 @@ void Selection::addList(SelContainer const &list) { _emitChanged(); } -void Selection::setReprList(SelContainer const &list) { +void Selection::setReprList(std::vector const &list) { _clear(); - for ( SelContainer::const_iterator iter=list.begin();iter!=list.end();iter++ ) { - SPObject *obj=_objectForXMLNode(reinterpret_cast(*iter)); + for ( std::vector::const_reverse_iterator iter=list.rbegin();iter!=list.rend();iter++ ) { + SPObject *obj=_objectForXMLNode(*iter); if (obj) { _add(obj); } @@ -280,7 +280,7 @@ SelContainer const &Selection::list() { return _objs; } -SelContainer const &Selection::itemList() { +std::vector const &Selection::itemList() { if (!_items.empty()) { return _items; } @@ -288,18 +288,16 @@ SelContainer const &Selection::itemList() { for ( SelContainer::const_iterator iter=_objs.begin();iter!=_objs.end();iter++ ) { SPObject *obj=reinterpret_cast(*iter); if (SP_IS_ITEM(obj)) { - _items.push_front(SP_ITEM(obj)); + _items.push_back(SP_ITEM(obj)); } } - _items.reverse(); - return _items; } std::vector const &Selection::reprList() { if (!_reprs.empty()) { return _reprs; } - SelContainer list = itemList(); - for ( SelContainer::const_iterator iter=list.begin();iter!=list.end();iter++ ) { + std::vector list = itemList(); + for ( std::vector::const_iterator iter=list.begin();iter!=list.end();iter++ ) { SPObject *obj=reinterpret_cast(*iter); _reprs.push_back(obj->getRepr()); } @@ -340,7 +338,7 @@ SPObject *Selection::single() { } SPItem *Selection::singleItem() { - SelContainer const items=itemList(); + std::vector const items=itemList(); if ( items.size()==1) { return reinterpret_cast(items.front()); } else { @@ -357,11 +355,11 @@ SPItem *Selection::largestItem(Selection::CompareSize compare) { } SPItem *Selection::_sizeistItem(bool sml, Selection::CompareSize compare) { - SelContainer const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->itemList(); gdouble max = sml ? 1e18 : 0; SPItem *ist = NULL; - for ( SelContainer::const_iterator i=items.begin();i!=items.end();i++ ) { + for ( std::vector::const_iterator i=items.begin();i!=items.end();i++ ) { Geom::OptRect obox = SP_ITEM(*i)->desktopPreferredBounds(); if (!obox || obox.isEmpty()) continue; Geom::Rect bbox = *obox; @@ -390,10 +388,10 @@ Geom::OptRect Selection::bounds(SPItem::BBoxType type) const Geom::OptRect Selection::geometricBounds() const { - SelContainer const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->itemList(); Geom::OptRect bbox; - for ( SelContainer::const_iterator iter=items.begin();iter!=items.end();iter++ ) { + for ( std::vector::const_iterator iter=items.begin();iter!=items.end();iter++ ) { bbox.unionWith(SP_ITEM(*iter)->desktopGeometricBounds()); } return bbox; @@ -401,10 +399,10 @@ Geom::OptRect Selection::geometricBounds() const Geom::OptRect Selection::visualBounds() const { - SelContainer const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->itemList(); Geom::OptRect bbox; - for ( SelContainer::const_iterator iter=items.begin();iter!=items.end();iter++ ) { + for ( std::vector::const_iterator iter=items.begin();iter!=items.end();iter++ ) { bbox.unionWith(SP_ITEM(*iter)->desktopVisualBounds()); } return bbox; @@ -422,10 +420,10 @@ Geom::OptRect Selection::preferredBounds() const Geom::OptRect Selection::documentBounds(SPItem::BBoxType type) const { Geom::OptRect bbox; - SelContainer const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->itemList(); if (items.empty()) return bbox; - for ( SelContainer::const_iterator iter=items.begin();iter!=items.end();iter++ ) { + for ( std::vector::const_iterator iter=items.begin();iter!=items.end();iter++ ) { SPItem *item = SP_ITEM(*iter); bbox |= item->documentBounds(type); } @@ -436,7 +434,7 @@ Geom::OptRect Selection::documentBounds(SPItem::BBoxType type) const // If we have a selection of multiple items, then the center of the first item // will be returned; this is also the case in SelTrans::centerRequest() boost::optional Selection::center() const { - SelContainer const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->itemList(); if (!items.empty()) { SPItem *first = reinterpret_cast(items.back()); // from the first item in selection if (first->isCenterSet()) { // only if set explicitly @@ -452,12 +450,12 @@ boost::optional Selection::center() const { } std::vector Selection::getSnapPoints(SnapPreferences const *snapprefs) const { - SelContainer const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->itemList(); SnapPreferences snapprefs_dummy = *snapprefs; // create a local copy of the snapping prefs snapprefs_dummy.setTargetSnappable(Inkscape::SNAPTARGET_ROTATION_CENTER, false); // locally disable snapping to the item center std::vector p; - for ( SelContainer::const_iterator iter=items.begin();iter!=items.end();iter++ ) { + for ( std::vector::const_iterator iter=items.begin();iter!=items.end();iter++ ) { SPItem *this_item = SP_ITEM(*iter); this_item->getSnappoints(p, &snapprefs_dummy); @@ -505,9 +503,9 @@ SPObject *Selection::_objectForXMLNode(Inkscape::XML::Node *repr) const { } uint Selection::numberOfLayers() { - SelContainer const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->itemList(); std::set layers; - for ( SelContainer::const_iterator iter=items.begin();iter!=items.end();iter++ ) { + for ( std::vector::const_iterator iter=items.begin();iter!=items.end();iter++ ) { SPObject *layer = _layers->layerForObject(SP_OBJECT(*iter)); layers.insert(layer); } @@ -515,9 +513,9 @@ uint Selection::numberOfLayers() { } guint Selection::numberOfParents() { - SelContainer const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->itemList(); std::set parents; - for ( SelContainer::const_iterator iter=items.begin();iter!=items.end();iter++ ) { + for ( std::vector::const_iterator iter=items.begin();iter!=items.end();iter++ ) { SPObject *parent = SP_OBJECT(*iter)->parent; parents.insert(parent); } -- cgit v1.2.3 From 7e4b6f793d31d3245bd8afbf6f10aa255ac3e7ae Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Thu, 19 Feb 2015 20:20:09 +0100 Subject: added a set to the Selection (bzr r13922.1.6) --- src/selection.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'src/selection.cpp') diff --git a/src/selection.cpp b/src/selection.cpp index 2e8251048..fd3b6abae 100644 --- a/src/selection.cpp +++ b/src/selection.cpp @@ -42,7 +42,9 @@ namespace Inkscape { Selection::Selection(LayerModel *layers, SPDesktop *desktop) : - _objs(SelContainer()), + _objs(std::list()), + _objs_vector(std::vector()), + _objs_set(std::set()), _reprs(std::vector()), _items(std::vector()), _layers(layers), @@ -145,7 +147,7 @@ bool Selection::includes(SPObject *obj) const { g_return_val_if_fail(SP_IS_OBJECT(obj), FALSE); - return ( find(_objs.begin(),_objs.end(),obj)!=_objs.end() ); + return ( _objs_set.find(obj)!=_objs_set.end() ); } void Selection::add(SPObject *obj, bool persist_selection_context/* = false */) { @@ -178,6 +180,7 @@ void Selection::_add(SPObject *obj) { _removeObjectAncestors(obj); _objs.push_front(obj); + _objs_set.insert(obj); add_3D_boxes_recursively(obj); @@ -232,6 +235,7 @@ void Selection::_remove(SPObject *obj) { remove_3D_boxes_recursively(obj); _objs.remove(obj); + _objs_set.erase(obj); } void Selection::setList(std::vector const &list) { @@ -276,8 +280,15 @@ void Selection::clear() { _emitChanged(); } -SelContainer const &Selection::list() { - return _objs; +std::vector const &Selection::list() { + if(!_objs_vector.empty()) + return _objs_vector; + + for ( std::list::const_iterator iter=_objs.begin();iter!=_objs.end();iter++ ) { + _objs_vector.push_back(*iter); + } + return _objs_vector; + } std::vector const &Selection::itemList() { @@ -285,7 +296,7 @@ std::vector const &Selection::itemList() { return _items; } - for ( SelContainer::const_iterator iter=_objs.begin();iter!=_objs.end();iter++ ) { + for ( std::list::const_iterator iter=_objs.begin();iter!=_objs.end();iter++ ) { SPObject *obj=reinterpret_cast(*iter); if (SP_IS_ITEM(obj)) { _items.push_back(SP_ITEM(obj)); @@ -470,7 +481,7 @@ std::vector Selection::getSnapPoints(SnapPreferenc } void Selection::_removeObjectDescendants(SPObject *obj) { - for ( SelContainer::const_iterator iter=_objs.begin();iter!=_objs.end();iter++ ) { + for ( std::list::const_iterator iter=_objs.begin();iter!=_objs.end();iter++ ) { SPObject *sel_obj=reinterpret_cast(*iter); SPObject *parent = sel_obj->parent; while (parent) { -- cgit v1.2.3 From 9a7fa4d1899d30ec745107823f307b2a0bf3172f Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Fri, 27 Feb 2015 03:10:36 +0100 Subject: corrected the casts (hopefully) (bzr r13922.1.10) --- src/selection.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'src/selection.cpp') diff --git a/src/selection.cpp b/src/selection.cpp index fd3b6abae..19e78512b 100644 --- a/src/selection.cpp +++ b/src/selection.cpp @@ -130,7 +130,7 @@ void Selection::_invalidateCachedLists() { void Selection::_clear() { _invalidateCachedLists(); while (!_objs.empty()) { - SPObject *obj=reinterpret_cast(_objs.front()); + SPObject *obj=_objs.front(); _remove(obj); } } @@ -254,7 +254,7 @@ void Selection::addList(std::vector const &list) { _invalidateCachedLists(); for ( std::vector::const_iterator iter=list.begin();iter!=list.end();iter++ ) { - SPObject *obj = reinterpret_cast(*iter); + SPObject *obj = *iter; if (includes(obj)) continue; _add (obj); } @@ -297,7 +297,7 @@ std::vector const &Selection::itemList() { } for ( std::list::const_iterator iter=_objs.begin();iter!=_objs.end();iter++ ) { - SPObject *obj=reinterpret_cast(*iter); + SPObject *obj=*iter; if (SP_IS_ITEM(obj)) { _items.push_back(SP_ITEM(obj)); } @@ -342,7 +342,7 @@ std::list const Selection::box3DList(Persp3D *persp) { SPObject *Selection::single() { if ( _objs.size() == 1 ) { - return reinterpret_cast(_objs.front()); + return _objs.front(); } else { return NULL; } @@ -351,7 +351,7 @@ SPObject *Selection::single() { SPItem *Selection::singleItem() { std::vector const items=itemList(); if ( items.size()==1) { - return reinterpret_cast(items.front()); + return items[0]; } else { return NULL; } @@ -447,7 +447,7 @@ Geom::OptRect Selection::documentBounds(SPItem::BBoxType type) const boost::optional Selection::center() const { std::vector const items = const_cast(this)->itemList(); if (!items.empty()) { - SPItem *first = reinterpret_cast(items.back()); // from the first item in selection + SPItem *first = items.back(); // from the first item in selection if (first->isCenterSet()) { // only if set explicitly return first->getCenter(); } @@ -467,7 +467,7 @@ std::vector Selection::getSnapPoints(SnapPreferenc snapprefs_dummy.setTargetSnappable(Inkscape::SNAPTARGET_ROTATION_CENTER, false); // locally disable snapping to the item center std::vector p; for ( std::vector::const_iterator iter=items.begin();iter!=items.end();iter++ ) { - SPItem *this_item = SP_ITEM(*iter); + SPItem *this_item = *iter; this_item->getSnappoints(p, &snapprefs_dummy); //Include the transformation origin for snapping @@ -482,7 +482,7 @@ std::vector Selection::getSnapPoints(SnapPreferenc void Selection::_removeObjectDescendants(SPObject *obj) { for ( std::list::const_iterator iter=_objs.begin();iter!=_objs.end();iter++ ) { - SPObject *sel_obj=reinterpret_cast(*iter); + SPObject *sel_obj= *iter; SPObject *parent = sel_obj->parent; while (parent) { if ( parent == obj ) { -- cgit v1.2.3 From 9bdc157f705ca61516e599cb416580283d21ec35 Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Fri, 27 Feb 2015 04:21:48 +0100 Subject: more cast cleanup (bzr r13922.1.11) --- src/selection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/selection.cpp') diff --git a/src/selection.cpp b/src/selection.cpp index 19e78512b..7e8190237 100644 --- a/src/selection.cpp +++ b/src/selection.cpp @@ -309,7 +309,7 @@ std::vector const &Selection::reprList() { if (!_reprs.empty()) { return _reprs; } std::vector list = itemList(); for ( std::vector::const_iterator iter=list.begin();iter!=list.end();iter++ ) { - SPObject *obj=reinterpret_cast(*iter); + SPObject *obj = *iter; _reprs.push_back(obj->getRepr()); } return _reprs; -- cgit v1.2.3 From 60bdd590969d1c32c392a8fed15f4ceac4a678d2 Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Mon, 27 Apr 2015 01:12:03 +0200 Subject: Just reread the entire diff against trunk. Given the diff size, i must have forgotten things, but hopefully, there are only very few changes of semantics: ->childList is now in the intuitive order (childList()[0] is now firstChild) -> sp_selection_paste_impl is now in the opposite order (change is local to selection-chemistry.cpp, and simplify a few things) -> selection.setReprList now takes the list in the opposite order. It was always the case (the list was always reversed before handing to it) -> a few comparison functions now work "the c++ way": the C way was to return -1 if ab, now they return (bool)(a()), - _objs_vector(std::vector()), - _objs_set(std::set()), + _objs(std::list()), + _objs_vector(std::vector()), + _objs_set(std::set()), _reprs(std::vector()), _items(std::vector()), _layers(layers), @@ -281,10 +281,10 @@ void Selection::clear() { } std::vector const &Selection::list() { - if(!_objs_vector.empty()) + if(!_objs_vector.empty()) return _objs_vector; - for ( std::list::const_iterator iter=_objs.begin();iter!=_objs.end();iter++ ) { + for ( std::list::const_iterator iter=_objs.begin();iter!=_objs.end();iter++ ) { _objs_vector.push_back(*iter); } return _objs_vector; @@ -349,7 +349,7 @@ SPObject *Selection::single() { } SPItem *Selection::singleItem() { - std::vector const items=itemList(); + std::vector const items=itemList(); if ( items.size()==1) { return items[0]; } else { @@ -366,7 +366,7 @@ SPItem *Selection::largestItem(Selection::CompareSize compare) { } SPItem *Selection::_sizeistItem(bool sml, Selection::CompareSize compare) { - std::vector const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->itemList(); gdouble max = sml ? 1e18 : 0; SPItem *ist = NULL; @@ -399,7 +399,7 @@ Geom::OptRect Selection::bounds(SPItem::BBoxType type) const Geom::OptRect Selection::geometricBounds() const { - std::vector const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->itemList(); Geom::OptRect bbox; for ( std::vector::const_iterator iter=items.begin();iter!=items.end();iter++ ) { @@ -410,7 +410,7 @@ Geom::OptRect Selection::geometricBounds() const Geom::OptRect Selection::visualBounds() const { - std::vector const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->itemList(); Geom::OptRect bbox; for ( std::vector::const_iterator iter=items.begin();iter!=items.end();iter++ ) { @@ -445,7 +445,7 @@ Geom::OptRect Selection::documentBounds(SPItem::BBoxType type) const // If we have a selection of multiple items, then the center of the first item // will be returned; this is also the case in SelTrans::centerRequest() boost::optional Selection::center() const { - std::vector const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->itemList(); if (!items.empty()) { SPItem *first = items.back(); // from the first item in selection if (first->isCenterSet()) { // only if set explicitly @@ -461,7 +461,7 @@ boost::optional Selection::center() const { } std::vector Selection::getSnapPoints(SnapPreferences const *snapprefs) const { - std::vector const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->itemList(); SnapPreferences snapprefs_dummy = *snapprefs; // create a local copy of the snapping prefs snapprefs_dummy.setTargetSnappable(Inkscape::SNAPTARGET_ROTATION_CENTER, false); // locally disable snapping to the item center @@ -514,8 +514,8 @@ SPObject *Selection::_objectForXMLNode(Inkscape::XML::Node *repr) const { } uint Selection::numberOfLayers() { - std::vector const items = const_cast(this)->itemList(); - std::set layers; + std::vector const items = const_cast(this)->itemList(); + std::set layers; for ( std::vector::const_iterator iter=items.begin();iter!=items.end();iter++ ) { SPObject *layer = _layers->layerForObject(SP_OBJECT(*iter)); layers.insert(layer); @@ -524,8 +524,8 @@ uint Selection::numberOfLayers() { } guint Selection::numberOfParents() { - std::vector const items = const_cast(this)->itemList(); - std::set parents; + std::vector const items = const_cast(this)->itemList(); + std::set parents; for ( std::vector::const_iterator iter=items.begin();iter!=items.end();iter++ ) { SPObject *parent = SP_OBJECT(*iter)->parent; parents.insert(parent); -- cgit v1.2.3 From 643c75ddbbbea2f018050faa1e7e38c71482418a Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Tue, 28 Apr 2015 01:20:57 +0200 Subject: removed a few useless SP_OBJECT() casts (bzr r13922.1.17) --- src/selection.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/selection.cpp') diff --git a/src/selection.cpp b/src/selection.cpp index d9266b599..b2fb6447e 100644 --- a/src/selection.cpp +++ b/src/selection.cpp @@ -517,7 +517,7 @@ uint Selection::numberOfLayers() { std::vector const items = const_cast(this)->itemList(); std::set layers; for ( std::vector::const_iterator iter=items.begin();iter!=items.end();iter++ ) { - SPObject *layer = _layers->layerForObject(SP_OBJECT(*iter)); + SPObject *layer = _layers->layerForObject(*iter); layers.insert(layer); } return layers.size(); @@ -527,7 +527,7 @@ guint Selection::numberOfParents() { std::vector const items = const_cast(this)->itemList(); std::set parents; for ( std::vector::const_iterator iter=items.begin();iter!=items.end();iter++ ) { - SPObject *parent = SP_OBJECT(*iter)->parent; + SPObject *parent = (*iter)->parent; parents.insert(parent); } return parents.size(); -- cgit v1.2.3 From 7aac87804be5fe99db56130848d94da4d07e2382 Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Wed, 29 Apr 2015 23:30:20 +0200 Subject: uint -> unsigned int (bzr r14075) --- src/selection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/selection.cpp') diff --git a/src/selection.cpp b/src/selection.cpp index b2fb6447e..017089ec5 100644 --- a/src/selection.cpp +++ b/src/selection.cpp @@ -513,7 +513,7 @@ SPObject *Selection::_objectForXMLNode(Inkscape::XML::Node *repr) const { return object; } -uint Selection::numberOfLayers() { +unsigned int Selection::numberOfLayers() { std::vector const items = const_cast(this)->itemList(); std::set layers; for ( std::vector::const_iterator iter=items.begin();iter!=items.end();iter++ ) { -- cgit v1.2.3 From c848ff33a5f3fd7eabfe83604bb42bb5e705c0b4 Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Thu, 30 Apr 2015 00:29:17 +0200 Subject: unsigned int -> size_t (bzr r14076) --- src/selection.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/selection.cpp') diff --git a/src/selection.cpp b/src/selection.cpp index 017089ec5..53772c381 100644 --- a/src/selection.cpp +++ b/src/selection.cpp @@ -513,7 +513,7 @@ SPObject *Selection::_objectForXMLNode(Inkscape::XML::Node *repr) const { return object; } -unsigned int Selection::numberOfLayers() { +size_t Selection::numberOfLayers() { std::vector const items = const_cast(this)->itemList(); std::set layers; for ( std::vector::const_iterator iter=items.begin();iter!=items.end();iter++ ) { @@ -523,7 +523,7 @@ unsigned int Selection::numberOfLayers() { return layers.size(); } -guint Selection::numberOfParents() { +size_t Selection::numberOfParents() { std::vector const items = const_cast(this)->itemList(); std::set parents; for ( std::vector::const_iterator iter=items.begin();iter!=items.end();iter++ ) { -- cgit v1.2.3