Ignore:
Timestamp:
2013-04-28T12:01:13+02:00 (11 years ago)
Author:
bastiK
Message:

applied #8643 - Very slow Purge command - O(N2) (patch by bilbo)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/PurgeAction.java

    r5360 r5905  
    9898        // Add referrer, unless the object to purge is not new
    9999        // and the parent is a relation
     100        HashSet<OsmPrimitive> toPurgeRecursive = new HashSet<OsmPrimitive>();
    100101        while (!toPurge.isEmpty()) {
    101             OsmPrimitive osm = toPurge.iterator().next();
    102             for (OsmPrimitive parent: osm.getReferrers()) {
    103                 if (toPurge.contains(parent) || toPurgeChecked.contains(parent)) {
    104                     continue;
    105                 }
    106                 if (parent instanceof Way || (parent instanceof Relation && osm.isNew())) {
    107                     toPurgeAdditionally.add(parent);
    108                     toPurge.add(parent);
    109                 }
    110             }
    111             toPurge.remove(osm);
    112             toPurgeChecked.add(osm);
     102
     103            for (OsmPrimitive osm: toPurge) {
     104                for (OsmPrimitive parent: osm.getReferrers()) {
     105                    if (toPurge.contains(parent) || toPurgeChecked.contains(parent) || toPurgeRecursive.contains(parent)) {
     106                        continue;
     107                    }
     108                    if (parent instanceof Way || (parent instanceof Relation && osm.isNew())) {
     109                        toPurgeAdditionally.add(parent);
     110                        toPurgeRecursive.add(parent);
     111                    }
     112                }
     113                toPurgeChecked.add(osm);
     114            }
     115            toPurge = toPurgeRecursive;
     116            toPurgeRecursive = new HashSet<OsmPrimitive>();
    113117        }
    114118
Note: See TracChangeset for help on using the changeset viewer.