Ticket #3696: optimize-selection-code.2.patch

File optimize-selection-code.2.patch, 2.9 KB (added by hansendc, 15 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 |   21 ++++++-------
     1 file changed, 11 insertions(+), 10 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  
    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  
    253257     * @param fireSelectionChangeEvent true, if the selection change listeners are to be notified; false, otherwise
    254258     */
    255259    public void setSelected(Collection<? extends OsmPrimitive> selection, boolean fireSelectionChangeEvent) {
    256         clearSelection(nodes);
    257         clearSelection(ways);
    258         clearSelection(relations);
    259         addSelected(selection);
     260        selectedPrimitives = new LinkedHashSet<OsmPrimitive>(selection);
    260261        if (fireSelectionChangeEvent) {
    261262            fireSelectionChanged(selection);
    262263        }
    public class DataSet implements Cloneabl  
    290291     * @param fireSelectionChangeEvent true, if the selection change listeners are to be notified; false, otherwise
    291292     */
    292293    public void addSelected(Collection<? extends OsmPrimitive> selection, boolean fireSelectionChangeEvent) {
    293         for (OsmPrimitive osm : selection) {
    294             osm.setSelected(true);
    295         }
    296294        selectedPrimitives.addAll(selection);
    297295        if (fireSelectionChangeEvent) {
    298296            fireSelectionChanged(selection);
    public class DataSet implements Cloneabl  
    307305        }
    308306        List<OsmPrimitive> list = Arrays.asList(osm);
    309307        setSelected(list);
    310         fireSelectionChanged(Arrays.asList(osm));
     308        fireSelectionChanged(list);
    311309    }
    312310
    313311    /**
    public class DataSet implements Cloneabl  
    353351    private Collection<OsmPrimitive> getSelected(Collection<? extends OsmPrimitive> list) {
    354352        if (list == null)
    355353            return new LinkedList<OsmPrimitive>();
     354        // getSelected() is called with large lists, so
     355        // creating the return list from the selection
     356        // should be faster most of the time.
    356357        Collection<OsmPrimitive> sel = new LinkedHashSet<OsmPrimitive>(selectedPrimitives);
    357358        sel.retainAll(list);
    358359        return sel;