Ticket #3696: optimize-selection-code.patch

File optimize-selection-code.patch, 2.3 KB (added by hansendc, 17 years ago)
  • (a) core/src/org/openstreetmap/josm/data/osm/DataSet.java~optimize-selection-code vs. (b) core-dave/src/org/openstreetmap/josm/data/osm/DataSet.java

    
    ---
    
     core-dave/src/org/openstreetmap/josm/data/osm/DataSet.java |   20 +++++++------
     1 file changed, 12 insertions(+), 8 deletions(-)
    
    diff -puN src/org/openstreetmap/josm/data/osm/DataSet.java~optimize-selection-code src/org/openstreetmap/josm/data/osm/DataSet.java
    a b public class DataSet implements Cloneabl  
    145145        } else if (primitive instanceof Relation) {
    146146            relations.remove(primitive);
    147147        }
    148         selectedPrimitves.remove(primitive);
     148        selectedPrimitives.remove(primitive);
    149149    }
    150150
    151151    public Collection<OsmPrimitive> getSelectedNodesAndWays() {
    152         Collection<OsmPrimitive> sel = getSelected(nodes);
    153         sel.addAll(getSelected(ways));
     152        Collection<OsmPrimitive> sel = new LinkedList<OsmPrimitive>();
     153        for (OsmPrimitive osm : selectedPrimitives) {
     154            if (osm instanceof Way ||
     155                osm instanceof Node)
     156                sel.add(osm);
     157        }
    154158        return sel;
    155159    }
    156160
    public class DataSet implements Cloneabl  
    252256    }
    253257
    254258    public void setSelected(Collection<? extends OsmPrimitive> selection) {
    255         clearSelection(nodes);
    256         clearSelection(ways);
    257         clearSelection(relations);
    258         addSelected(selection);
     259        selectedPrimitives = new LinkedHashSet<OsmPrimitive>(selection);
    259260        fireSelectionChanged(selection);
    260261    }
    261262
    public class DataSet implements Cloneabl  
    266267        }
    267268        List<OsmPrimitive> list = Arrays.asList(osm);
    268269        setSelected(list);
    269         fireSelectionChanged(Arrays.asList(osm));
     270        fireSelectionChanged(list);
    270271    }
    271272
    272273    /**
    public class DataSet implements Cloneabl  
    312313    private Collection<OsmPrimitive> getSelected(Collection<? extends OsmPrimitive> list) {
    313314        if (list == null)
    314315            return new LinkedList<OsmPrimitive>();
     316        // getSelected() is called with large lists, so
     317        // creating the return list from the selection
     318        // should be faster most of the time.
    315319        Collection<OsmPrimitive> sel = new LinkedHashSet<OsmPrimitive>(selectedPrimitives);
    316320        sel.retainAll(list);
    317321        return sel;