scolebourne    2005/01/03 15:20:42

  Modified:    primitives/src/java/org/apache/commons/collections/primitives
                        ArrayCharList.java ArrayFloatList.java
                        ArrayByteList.java ArrayShortList.java
                        ArrayBooleanList.java ArrayIntList.java
                        ArrayLongList.java ArrayDoubleList.java
  Log:
  Improve performance of addAll
  bug 30604, from Robert Fischer
  
  Revision  Changes    Path
  1.6       +26 -2     
jakarta-commons/primitives/src/java/org/apache/commons/collections/primitives/ArrayCharList.java
  
  Index: ArrayCharList.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/primitives/src/java/org/apache/commons/collections/primitives/ArrayCharList.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ArrayCharList.java        25 Feb 2004 20:46:25 -0000      1.5
  +++ ArrayCharList.java        3 Jan 2005 23:20:42 -0000       1.6
  @@ -1,5 +1,5 @@
   /*
  - * Copyright 2002-2004 The Apache Software Foundation
  + * Copyright 2002-2005 The Apache Software Foundation
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
  @@ -155,6 +155,30 @@
       public void clear() {
           incrModCount();
           _size = 0;
  +    }
  +
  +    public boolean addAll(CharCollection collection) {
  +        return addAll(size(), collection);
  +    }
  +
  +    public boolean addAll(int index, CharCollection collection) {
  +        if (collection.size() == 0) {
  +            return false;
  +        }
  +        checkRangeIncludingEndpoint(index);
  +        incrModCount();
  +        ensureCapacity(_size + collection.size());
  +        if (index != _size) {
  +            // Need to move some elements
  +            System.arraycopy(_data, index, _data, index + collection.size(), 
_size - index);
  +        }
  +        int ptr = index;
  +        for (CharIterator it = collection.iterator(); it.hasNext();) {
  +            _data[index] = it.next();
  +            index++;
  +        }
  +        _size += collection.size();
  +        return true;
       }
   
       // capacity methods
  
  
  
  1.6       +26 -2     
jakarta-commons/primitives/src/java/org/apache/commons/collections/primitives/ArrayFloatList.java
  
  Index: ArrayFloatList.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/primitives/src/java/org/apache/commons/collections/primitives/ArrayFloatList.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ArrayFloatList.java       25 Feb 2004 20:46:25 -0000      1.5
  +++ ArrayFloatList.java       3 Jan 2005 23:20:42 -0000       1.6
  @@ -1,5 +1,5 @@
   /*
  - * Copyright 2002-2004 The Apache Software Foundation
  + * Copyright 2002-2005 The Apache Software Foundation
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
  @@ -155,6 +155,30 @@
       public void clear() {
           incrModCount();
           _size = 0;
  +    }
  +
  +    public boolean addAll(FloatCollection collection) {
  +        return addAll(size(), collection);
  +    }
  +
  +    public boolean addAll(int index, FloatCollection collection) {
  +        if (collection.size() == 0) {
  +            return false;
  +        }
  +        checkRangeIncludingEndpoint(index);
  +        incrModCount();
  +        ensureCapacity(_size + collection.size());
  +        if (index != _size) {
  +            // Need to move some elements
  +            System.arraycopy(_data, index, _data, index + collection.size(), 
_size - index);
  +        }
  +        int ptr = index;
  +        for (FloatIterator it = collection.iterator(); it.hasNext();) {
  +            _data[index] = it.next();
  +            index++;
  +        }
  +        _size += collection.size();
  +        return true;
       }
   
       // capacity methods
  
  
  
  1.6       +26 -2     
jakarta-commons/primitives/src/java/org/apache/commons/collections/primitives/ArrayByteList.java
  
  Index: ArrayByteList.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/primitives/src/java/org/apache/commons/collections/primitives/ArrayByteList.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ArrayByteList.java        25 Feb 2004 20:46:25 -0000      1.5
  +++ ArrayByteList.java        3 Jan 2005 23:20:42 -0000       1.6
  @@ -1,5 +1,5 @@
   /*
  - * Copyright 2002-2004 The Apache Software Foundation
  + * Copyright 2002-2005 The Apache Software Foundation
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
  @@ -157,6 +157,30 @@
           _size = 0;
       }
       
  +    public boolean addAll(ByteCollection collection) {
  +        return addAll(size(), collection);
  +    }
  +
  +    public boolean addAll(int index, ByteCollection collection) {
  +        if (collection.size() == 0) {
  +            return false;
  +        }
  +        checkRangeIncludingEndpoint(index);
  +        incrModCount();
  +        ensureCapacity(_size + collection.size());
  +        if (index != _size) {
  +            // Need to move some elements
  +            System.arraycopy(_data, index, _data, index + collection.size(), 
_size - index);
  +        }
  +        int ptr = index;
  +        for (ByteIterator it = collection.iterator(); it.hasNext();) {
  +            _data[index] = it.next();
  +            index++;
  +        }
  +        _size += collection.size();
  +        return true;
  +    }
  +
       // capacity methods
       
//-------------------------------------------------------------------------
   
  
  
  
  1.6       +26 -2     
jakarta-commons/primitives/src/java/org/apache/commons/collections/primitives/ArrayShortList.java
  
  Index: ArrayShortList.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/primitives/src/java/org/apache/commons/collections/primitives/ArrayShortList.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ArrayShortList.java       25 Feb 2004 20:46:25 -0000      1.5
  +++ ArrayShortList.java       3 Jan 2005 23:20:42 -0000       1.6
  @@ -1,5 +1,5 @@
   /*
  - * Copyright 2002-2004 The Apache Software Foundation
  + * Copyright 2002-2005 The Apache Software Foundation
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
  @@ -155,6 +155,30 @@
       public void clear() {
           incrModCount();
           _size = 0;
  +    }
  +
  +    public boolean addAll(ShortCollection collection) {
  +        return addAll(size(), collection);
  +    }
  +
  +    public boolean addAll(int index, ShortCollection collection) {
  +        if (collection.size() == 0) {
  +            return false;
  +        }
  +        checkRangeIncludingEndpoint(index);
  +        incrModCount();
  +        ensureCapacity(_size + collection.size());
  +        if (index != _size) {
  +            // Need to move some elements
  +            System.arraycopy(_data, index, _data, index + collection.size(), 
_size - index);
  +        }
  +        int ptr = index;
  +        for (ShortIterator it = collection.iterator(); it.hasNext();) {
  +            _data[index] = it.next();
  +            index++;
  +        }
  +        _size += collection.size();
  +        return true;
       }
   
       // capacity methods
  
  
  
  1.4       +26 -2     
jakarta-commons/primitives/src/java/org/apache/commons/collections/primitives/ArrayBooleanList.java
  
  Index: ArrayBooleanList.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/primitives/src/java/org/apache/commons/collections/primitives/ArrayBooleanList.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ArrayBooleanList.java     12 Jul 2004 18:29:44 -0000      1.3
  +++ ArrayBooleanList.java     3 Jan 2005 23:20:42 -0000       1.4
  @@ -1,5 +1,5 @@
   /*
  - * Copyright 2002-2004 The Apache Software Foundation
  + * Copyright 2002-2005 The Apache Software Foundation
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
  @@ -154,6 +154,30 @@
           _size = 0;
       }
       
  +    public boolean addAll(BooleanCollection collection) {
  +        return addAll(size(), collection);
  +    }
  +
  +    public boolean addAll(int index, BooleanCollection collection) {
  +        if (collection.size() == 0) {
  +            return false;
  +        }
  +        checkRangeIncludingEndpoint(index);
  +        incrModCount();
  +        ensureCapacity(_size + collection.size());
  +        if (index != _size) {
  +            // Need to move some elements
  +            System.arraycopy(_data, index, _data, index + collection.size(), 
_size - index);
  +        }
  +        int ptr = index;
  +        for (BooleanIterator it = collection.iterator(); it.hasNext();) {
  +            _data[index] = it.next();
  +            index++;
  +        }
  +        _size += collection.size();
  +        return true;
  +    }
  +
       // capacity methods
       
//-------------------------------------------------------------------------
   
  
  
  
  1.6       +28 -3     
jakarta-commons/primitives/src/java/org/apache/commons/collections/primitives/ArrayIntList.java
  
  Index: ArrayIntList.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/primitives/src/java/org/apache/commons/collections/primitives/ArrayIntList.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ArrayIntList.java 25 Feb 2004 20:46:25 -0000      1.5
  +++ ArrayIntList.java 3 Jan 2005 23:20:42 -0000       1.6
  @@ -1,5 +1,5 @@
   /*
  - * Copyright 2002-2004 The Apache Software Foundation
  + * Copyright 2002-2005 The Apache Software Foundation
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
  @@ -27,7 +27,8 @@
    * @since Commons Primitives 1.0
    * @version $Revision$ $Date$
    * 
  - * @author Rodney Waldhoff 
  + * @author Rodney Waldhoff
  + * @author Robert Fischer
    */
   public class ArrayIntList extends RandomAccessIntList implements IntList, 
Serializable {
   
  @@ -156,6 +157,30 @@
           incrModCount();
           _size = 0;
       }
  +
  +    public boolean addAll(IntCollection collection) {
  +             return addAll(size(), collection);
  +     }
  +
  +     public boolean addAll(int index, IntCollection collection) {
  +             if (collection.size() == 0) {
  +                     return false;
  +        }
  +             checkRangeIncludingEndpoint(index);
  +             incrModCount();
  +             ensureCapacity(_size + collection.size());
  +             if (index != _size) {
  +                     // Need to move some elements
  +                     System.arraycopy(_data, index, _data, index + 
collection.size(), _size - index);
  +             }
  +             int ptr = index;
  +             for (IntIterator it = collection.iterator(); it.hasNext();) {
  +                     _data[index] = it.next();
  +                     index++;
  +             }
  +             _size += collection.size();
  +             return true;
  +     }
   
       // capacity methods
       
//-------------------------------------------------------------------------
  
  
  
  1.6       +26 -2     
jakarta-commons/primitives/src/java/org/apache/commons/collections/primitives/ArrayLongList.java
  
  Index: ArrayLongList.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/primitives/src/java/org/apache/commons/collections/primitives/ArrayLongList.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ArrayLongList.java        25 Feb 2004 20:46:25 -0000      1.5
  +++ ArrayLongList.java        3 Jan 2005 23:20:42 -0000       1.6
  @@ -1,5 +1,5 @@
   /*
  - * Copyright 2002-2004 The Apache Software Foundation
  + * Copyright 2002-2005 The Apache Software Foundation
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
  @@ -155,6 +155,30 @@
       public void clear() {
           incrModCount();
           _size = 0;
  +    }
  +
  +    public boolean addAll(LongCollection collection) {
  +        return addAll(size(), collection);
  +    }
  +
  +    public boolean addAll(int index, LongCollection collection) {
  +        if (collection.size() == 0) {
  +            return false;
  +        }
  +        checkRangeIncludingEndpoint(index);
  +        incrModCount();
  +        ensureCapacity(_size + collection.size());
  +        if (index != _size) {
  +            // Need to move some elements
  +            System.arraycopy(_data, index, _data, index + collection.size(), 
_size - index);
  +        }
  +        int ptr = index;
  +        for (LongIterator it = collection.iterator(); it.hasNext();) {
  +            _data[index] = it.next();
  +            index++;
  +        }
  +        _size += collection.size();
  +        return true;
       }
   
       // capacity methods
  
  
  
  1.6       +26 -2     
jakarta-commons/primitives/src/java/org/apache/commons/collections/primitives/ArrayDoubleList.java
  
  Index: ArrayDoubleList.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/primitives/src/java/org/apache/commons/collections/primitives/ArrayDoubleList.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ArrayDoubleList.java      25 Feb 2004 20:46:25 -0000      1.5
  +++ ArrayDoubleList.java      3 Jan 2005 23:20:42 -0000       1.6
  @@ -1,5 +1,5 @@
   /*
  - * Copyright 2002-2004 The Apache Software Foundation
  + * Copyright 2002-2005 The Apache Software Foundation
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
  @@ -155,6 +155,30 @@
       public void clear() {
           incrModCount();
           _size = 0;
  +    }
  +
  +    public boolean addAll(DoubleCollection collection) {
  +        return addAll(size(), collection);
  +    }
  +
  +    public boolean addAll(int index, DoubleCollection collection) {
  +        if (collection.size() == 0) {
  +            return false;
  +        }
  +        checkRangeIncludingEndpoint(index);
  +        incrModCount();
  +        ensureCapacity(_size + collection.size());
  +        if (index != _size) {
  +            // Need to move some elements
  +            System.arraycopy(_data, index, _data, index + collection.size(), 
_size - index);
  +        }
  +        int ptr = index;
  +        for (DoubleIterator it = collection.iterator(); it.hasNext();) {
  +            _data[index] = it.next();
  +            index++;
  +        }
  +        _size += collection.size();
  +        return true;
       }
   
       // capacity methods
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to