Author: cutting
Date: Sat Feb 19 00:40:03 2011
New Revision: 1072217
URL: http://svn.apache.org/viewvc?rev=1072217&view=rev
Log:
AVRO-730. Java: Add set() and remove() methods to GenericData.Array.
Contributed by Chase Bradford.
Modified:
avro/trunk/CHANGES.txt
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
avro/trunk/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java
Modified: avro/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1072217&r1=1072216&r2=1072217&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Sat Feb 19 00:40:03 2011
@@ -91,6 +91,9 @@ Avro 1.5.0 (unreleased)
AVRO-750. C: Install a pkg-config file
(dcreager)
+ AVRO-730. Java: Add set() and remove() methods to GenericData.Array.
+ (Chase Bradford via cutting)
+
IMPROVEMENTS
AVRO-765. Java: Improvement to BinaryDecoder readLong performance
Modified:
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
URL:
http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java?rev=1072217&r1=1072216&r2=1072217&view=diff
==============================================================================
---
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
(original)
+++
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
Sat Feb 19 00:40:03 2011
@@ -123,6 +123,22 @@ public class GenericData {
elements[size++] = o;
return true;
}
+ @Override public T set(int i, T o) {
+ if (i >= size)
+ throw new IndexOutOfBoundsException("Index " + i + " out of bounds.");
+ T response = (T)elements[i];
+ elements[i] = o;
+ return response;
+ }
+ @Override public T remove(int i) {
+ if (i >= size)
+ throw new IndexOutOfBoundsException("Index " + i + " out of bounds.");
+ T result = (T)elements[i];
+ --size;
+ System.arraycopy(elements, i+1, elements, i, (size-i));
+ elements[size] = null;
+ return result;
+ }
public T peek() {
return (size < elements.length) ? (T)elements[size] : null;
}
Modified:
avro/trunk/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java
URL:
http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java?rev=1072217&r1=1072216&r2=1072217&view=diff
==============================================================================
---
avro/trunk/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java
(original)
+++
avro/trunk/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java
Sat Feb 19 00:40:03 2011
@@ -149,6 +149,64 @@ public class TestGenericData {
array.get(0);
fail("Expected IndexOutOfBoundsException getting index 0 after clear()");
} catch (IndexOutOfBoundsException e) {}
+
+ }
+ @Test
+ public void testArrayRemove()
+ {
+ Schema schema = Schema.createArray(Schema.create(Schema.Type.INT));
+ GenericArray<Integer> array = new GenericData.Array<Integer>(10, schema);
+ array.clear();
+ for(int i=0; i<10; ++i)
+ array.add(i);
+ assertEquals(10, array.size());
+ assertEquals(new Integer(0), array.get(0));
+ assertEquals(new Integer(9), array.get(9));
+
+ array.remove(0);
+ assertEquals(9, array.size());
+ assertEquals(new Integer(1), array.get(0));
+ assertEquals(new Integer(2), array.get(1));
+ assertEquals(new Integer(9), array.get(8));
+
+ // Test boundary errors.
+ try {
+ array.get(9);
+ fail("Expected IndexOutOfBoundsException after removing an element");
+ } catch (IndexOutOfBoundsException e){}
+ try {
+ array.set(9, 99);
+ fail("Expected IndexOutOfBoundsException after removing an element");
+ } catch (IndexOutOfBoundsException e){}
+ try {
+ array.remove(9);
+ fail("Expected IndexOutOfBoundsException after removing an element");
+ } catch (IndexOutOfBoundsException e){}
+
+ // Test that we can still remove for properly sized arrays, and the rval
+ assertEquals(new Integer(9), array.remove(8));
+ assertEquals(8, array.size());
+
+
+ // Test insertion after remove
+ array.add(88);
+ assertEquals(new Integer(88), array.get(8));
+ }
+ @Test
+ public void testArraySet()
+ {
+ Schema schema = Schema.createArray(Schema.create(Schema.Type.INT));
+ GenericArray<Integer> array = new GenericData.Array<Integer>(10, schema);
+ array.clear();
+ for(int i=0; i<10; ++i)
+ array.add(i);
+ assertEquals(10, array.size());
+ assertEquals(new Integer(0), array.get(0));
+ assertEquals(new Integer(5), array.get(5));
+
+ assertEquals(new Integer(5), array.set(5, 55));
+ assertEquals(10, array.size());
+ assertEquals(new Integer(55), array.get(5));
}
@Test