Changeset 3630 in josm for trunk/src/org


Ignore:
Timestamp:
2010-10-24T00:39:02+02:00 (14 years ago)
Author:
bastiK
Message:

applied #5552 (patch by extropy) - Delete performance improvement

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/Way.java

    r3515 r3630  
    66import java.util.ArrayList;
    77import java.util.Arrays;
    8 import java.util.Collection;
    98import java.util.List;
     9import java.util.Set;
    1010
    1111import org.openstreetmap.josm.Main;
     
    294294    }
    295295
    296     public void removeNodes(Collection<? extends OsmPrimitive> selection) {
     296    public void removeNodes(Set<? extends OsmPrimitive> selection) {
    297297        if (isIncomplete()) return;
    298298        boolean locked = writeLock();
    299299        try {
    300             for(OsmPrimitive p : selection) {
    301                 if (p instanceof Node) {
    302                     removeNode((Node)p);
     300            boolean closed = (lastNode() == firstNode() && selection.contains(lastNode()));
     301            List<Node> copy = new ArrayList<Node>();
     302
     303            for (Node n: nodes) {
     304                if (!selection.contains(n)) {
     305                    copy.add(n);
    303306                }
    304307            }
     308
     309            int i = copy.size();
     310            if (closed && i > 2) {
     311                copy.add(copy.get(0));
     312            } else if (i >= 2 && i <= 3 && copy.get(0) == copy.get(i-1)) {
     313                copy.remove(i-1);
     314            }
     315            setNodes(copy);
    305316        } finally {
    306317            writeUnlock(locked);
Note: See TracChangeset for help on using the changeset viewer.