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]