You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2016/12/16 14:46:33 UTC
svn commit: r1774604 - in /uima/uimaj/trunk:
uima-docbook-references/src/docbook/
uimaj-core/src/main/java/org/apache/uima/jcas/cas/
uimaj-core/src/test/java/org/apache/uima/jcas/test/
Author: schor
Date: Fri Dec 16 14:46:32 2016
New Revision: 1774604
URL: http://svn.apache.org/viewvc?rev=1774604&view=rev
Log:
[UIMA-5207] extend arrays and list impls for Java primitive types to include same new extensions (push, iterable). update docs and tests
Modified:
uima/uimaj/trunk/uima-docbook-references/src/docbook/ref.cas.xml
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/BooleanArray.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ByteArray.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/DoubleArray.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatList.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArray.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerList.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/LongArray.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFloatList.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyIntegerList.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyStringList.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ShortArray.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringList.java
uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/jcas/test/JCasTest.java
Modified: uima/uimaj/trunk/uima-docbook-references/src/docbook/ref.cas.xml
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uima-docbook-references/src/docbook/ref.cas.xml?rev=1774604&r1=1774603&r2=1774604&view=diff
==============================================================================
--- uima/uimaj/trunk/uima-docbook-references/src/docbook/ref.cas.xml (original)
+++ uima/uimaj/trunk/uima-docbook-references/src/docbook/ref.cas.xml Fri Dec 16 14:46:32 2016
@@ -281,6 +281,14 @@ under the License.
<para>The <literal>uima.cas.FSArray</literal> type is an array whose elements are
arbitrary other feature structures (instances of non-primitive types).</para>
+
+ <para>The JCas cover classes for the array types support the Iterable API, so you may
+ write extended for loops over instances of these. For example:
+ <programlisting>FSArray myArray = ...
+for (TOP fs : myArray) {
+ somemethod(fs);
+}</programlisting>
+ </para>
<para>There are 3 built-in types associated with the artifact being analyzed:
@@ -364,12 +372,12 @@ under the License.
particular value for that part of the list. The tail refers to the next list object
(either a non-empty one or the empty version to indicate the end of the list).</para>
- <para>For JCas users, the new operator for the NonEmptyXXX classes includes a 3 argument version
- where you may specify the head and tail values as part of the constructor. The JCas classes implement
+ <para>For JCas users, the new operator for the NonEmptyXyzList classes includes a 3 argument version
+ where you may specify the head and tail values as part of the constructor. The JCas
+ cover classes for these implement
a <code>push(item)</code> method which creates a new non-empty node, sets the <code>head</code> value
to <code>item</code>, and the tail to the node it is called on, and returns the new node.
- Also, the
- StringList and FSList implement Iterable, so you can use the enhanced Java <code>for</code> operator.
+ These classes also implement Iterable, so you can use the enhanced Java <code>for</code> operator.
The iterator stops when it gets to the end of the list, determined by either the tail being null or
the element being one of the EmptyXXXList elements.
Here's a StringList example:
@@ -379,9 +387,7 @@ sl = sl.push("1");
for (String s : sl) {
someMethod(s); // some sample use
-}
-// also works with arrays
-</programlisting>
+}</programlisting>
</para>
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/BooleanArray.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/BooleanArray.java?rev=1774604&r1=1774603&r2=1774604&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/BooleanArray.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/BooleanArray.java Fri Dec 16 14:46:32 2016
@@ -19,12 +19,15 @@
package org.apache.uima.jcas.cas;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
import org.apache.uima.cas.BooleanArrayFS;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.JCasRegistry;
/** JCas class model for BooleanArray */
-public final class BooleanArray extends TOP implements BooleanArrayFS {
+public final class BooleanArray extends TOP implements BooleanArrayFS, Iterable<Boolean> {
/**
* Each cover class when loaded sets an index. Used in the JCas typeArray to go from the cover
* class or class instance to the corresponding instance of the _Type class
@@ -140,4 +143,30 @@ public final class BooleanArray extends
copyToArray(0, strArray, 0, size);
return strArray;
}
+
+ @Override
+ public Iterator<Boolean> iterator() {
+ return new Iterator<Boolean>() {
+ int i = 0;
+
+ @Override
+ public boolean hasNext() {
+ return i < size();
+ }
+
+ @Override
+ public Boolean next() {
+ if (!hasNext())
+ throw new NoSuchElementException();
+ return get(i++);
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ };
+ }
+
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ByteArray.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ByteArray.java?rev=1774604&r1=1774603&r2=1774604&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ByteArray.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ByteArray.java Fri Dec 16 14:46:32 2016
@@ -19,12 +19,15 @@
package org.apache.uima.jcas.cas;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
import org.apache.uima.cas.ByteArrayFS;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.JCasRegistry;
/** JCas class model for ByteArray */
-public final class ByteArray extends TOP implements ByteArrayFS {
+public final class ByteArray extends TOP implements ByteArrayFS, Iterable<Byte> {
/**
* Each cover class when loaded sets an index. Used in the JCas typeArray to go from the cover
* class or class instance to the corresponding instance of the _Type class
@@ -140,4 +143,29 @@ public final class ByteArray extends TOP
copyToArray(0, strArray, 0, size);
return strArray;
}
+
+ @Override
+ public Iterator<Byte> iterator() {
+ return new Iterator<Byte>() {
+ int i = 0;
+
+ @Override
+ public boolean hasNext() {
+ return i < size();
+ }
+
+ @Override
+ public Byte next() {
+ if (!hasNext())
+ throw new NoSuchElementException();
+ return get(i++);
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ };
+ }
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/DoubleArray.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/DoubleArray.java?rev=1774604&r1=1774603&r2=1774604&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/DoubleArray.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/DoubleArray.java Fri Dec 16 14:46:32 2016
@@ -19,12 +19,15 @@
package org.apache.uima.jcas.cas;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
import org.apache.uima.cas.DoubleArrayFS;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.JCasRegistry;
/** JCas class model for DoubleArray */
-public final class DoubleArray extends TOP implements DoubleArrayFS {
+public final class DoubleArray extends TOP implements DoubleArrayFS, Iterable<Double> {
/**
* Each cover class when loaded sets an index. Used in the JCas typeArray to go from the cover
* class or class instance to the corresponding instance of the _Type class
@@ -140,4 +143,29 @@ public final class DoubleArray extends T
copyToArray(0, strArray, 0, size);
return strArray;
}
+
+ @Override
+ public Iterator<Double> iterator() {
+ return new Iterator<Double>() {
+ int i = 0;
+
+ @Override
+ public boolean hasNext() {
+ return i < size();
+ }
+
+ @Override
+ public Double next() {
+ if (!hasNext())
+ throw new NoSuchElementException();
+ return get(i++);
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ };
+ }
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java?rev=1774604&r1=1774603&r2=1774604&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java Fri Dec 16 14:46:32 2016
@@ -79,4 +79,13 @@ public class FSList extends org.apache.u
public Iterator<TOP> iterator() {
return Collections.emptyIterator(); // NonEmptyFSList overrides
}
+
+ /**
+ * pushes item onto front of this list
+ * @param item the item to push onto the list
+ * @return the new list, with this item as the head value of the first element
+ */
+ public NonEmptyFSList push(TOP item) {
+ return new NonEmptyFSList(this.jcasType.jcas, item, this);
+ }
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatList.java?rev=1774604&r1=1774603&r2=1774604&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatList.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatList.java Fri Dec 16 14:46:32 2016
@@ -19,11 +19,14 @@
package org.apache.uima.jcas.cas;
+import java.util.Collections;
+import java.util.Iterator;
+
import org.apache.uima.cas.CASRuntimeException;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.JCasRegistry;
-public class FloatList extends org.apache.uima.jcas.cas.TOP {
+public class FloatList extends org.apache.uima.jcas.cas.TOP implements Iterable<Float> {
public final static int typeIndexID = JCasRegistry.register(FloatList.class);
@@ -72,4 +75,19 @@ public class FloatList extends org.apach
cg = c.getTail();
}
}
+
+ /**
+ * pushes item onto front of this list
+ * @param item the item to push onto the list
+ * @return the new list, with this item as the head value of the first element
+ */
+ public NonEmptyFloatList push(float item) {
+ return new NonEmptyFloatList(this.jcasType.jcas, item, this);
+ }
+
+ @Override
+ public Iterator<Float> iterator() {
+ return Collections.emptyIterator(); // NonEmptyList overrides
+ }
+
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArray.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArray.java?rev=1774604&r1=1774603&r2=1774604&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArray.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArray.java Fri Dec 16 14:46:32 2016
@@ -19,12 +19,15 @@
package org.apache.uima.jcas.cas;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
import org.apache.uima.cas.IntArrayFS;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.JCasRegistry;
/** The Java Class model corresponding to the Cas IntegerArray_JCasImpl type. */
-public final class IntegerArray extends TOP implements IntArrayFS {
+public final class IntegerArray extends TOP implements IntArrayFS, Iterable<Integer> {
/**
* Each cover class when loaded sets an index. Used in the JCas typeArray to go from the cover
* class or class instance to the corresponding instance of the _Type class
@@ -160,4 +163,29 @@ public final class IntegerArray extends
copyToArray(0, strArray, 0, size);
return strArray;
}
+
+ @Override
+ public Iterator<Integer> iterator() {
+ return new Iterator<Integer>() {
+ int i = 0;
+
+ @Override
+ public boolean hasNext() {
+ return i < size();
+ }
+
+ @Override
+ public Integer next() {
+ if (!hasNext())
+ throw new NoSuchElementException();
+ return get(i++);
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ };
+ }
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerList.java?rev=1774604&r1=1774603&r2=1774604&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerList.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerList.java Fri Dec 16 14:46:32 2016
@@ -19,11 +19,14 @@
package org.apache.uima.jcas.cas;
+import java.util.Collections;
+import java.util.Iterator;
+
import org.apache.uima.cas.CASRuntimeException;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.JCasRegistry;
-public class IntegerList extends org.apache.uima.jcas.cas.TOP {
+public class IntegerList extends org.apache.uima.jcas.cas.TOP implements Iterable<Integer> {
public final static int typeIndexID = JCasRegistry.register(IntegerList.class);
@@ -71,4 +74,18 @@ public class IntegerList extends org.apa
cg = c.getTail();
}
}
+
+ /**
+ * pushes item onto front of this list
+ * @param item the item to push onto the list
+ * @return the new list, with this item as the head value of the first element
+ */
+ public NonEmptyIntegerList push(int item) {
+ return new NonEmptyIntegerList(this.jcasType.jcas, item, this);
+ }
+
+ @Override
+ public Iterator<Integer> iterator() {
+ return Collections.emptyIterator(); // NonEmptyList overrides
+ }
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/LongArray.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/LongArray.java?rev=1774604&r1=1774603&r2=1774604&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/LongArray.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/LongArray.java Fri Dec 16 14:46:32 2016
@@ -19,12 +19,15 @@
package org.apache.uima.jcas.cas;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
import org.apache.uima.cas.LongArrayFS;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.JCasRegistry;
/** JCas class model for LongArray */
-public final class LongArray extends TOP implements LongArrayFS {
+public final class LongArray extends TOP implements LongArrayFS, Iterable<Long> {
/**
* Each cover class when loaded sets an index. Used in the JCas typeArray to go from the cover
* class or class instance to the corresponding instance of the _Type class
@@ -140,4 +143,30 @@ public final class LongArray extends TOP
copyToArray(0, strArray, 0, size);
return strArray;
}
+
+ @Override
+ public Iterator<Long> iterator() {
+ return new Iterator<Long>() {
+ int i = 0;
+
+ @Override
+ public boolean hasNext() {
+ return i < size();
+ }
+
+ @Override
+ public Long next() {
+ if (!hasNext())
+ throw new NoSuchElementException();
+ return get(i++);
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ };
+ }
+
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java?rev=1774604&r1=1774603&r2=1774604&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java Fri Dec 16 14:46:32 2016
@@ -25,7 +25,7 @@ import java.util.NoSuchElementException;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.JCasRegistry;
-public class NonEmptyFSList extends FSList implements Iterable<TOP> {
+public class NonEmptyFSList extends FSList {
public final static int typeIndexID = JCasRegistry.register(NonEmptyFSList.class);
@@ -47,6 +47,17 @@ public class NonEmptyFSList extends FSLi
public NonEmptyFSList(JCas jcas) {
super(jcas);
}
+
+ /**
+ * @param jcas the JCas create the new Feature Structure in
+ * @param item the head item
+ * @param tail the tail item
+ */
+ public NonEmptyFSList(JCas jcas, TOP item, FSList tail) {
+ this(jcas);
+ setHead(item);
+ setTail(tail);
+ }
// *------------------*
// * Feature: head
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFloatList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFloatList.java?rev=1774604&r1=1774603&r2=1774604&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFloatList.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFloatList.java Fri Dec 16 14:46:32 2016
@@ -19,6 +19,9 @@
package org.apache.uima.jcas.cas;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.JCasRegistry;
@@ -45,6 +48,17 @@ public class NonEmptyFloatList extends F
super(jcas);
}
+ /**
+ * @param jcas the JCas create the new Feature Structure in
+ * @param item the head item
+ * @param tail the tail item
+ */
+ public NonEmptyFloatList(JCas jcas, float item, FloatList tail) {
+ this(jcas);
+ setHead(item);
+ setTail(tail);
+ }
+
// *------------------*
// * Feature: head
/* getter for head * */
@@ -83,4 +97,35 @@ public class NonEmptyFloatList extends F
jcasType.ll_cas.ll_setRefValue(addr, ((NonEmptyFloatList_Type) jcasType).casFeatCode_tail,
jcasType.ll_cas.ll_getFSRef(v));
}
+
+ @Override
+ public Iterator<Float> iterator() {
+ return new Iterator<Float>() {
+
+ FloatList node = NonEmptyFloatList.this;
+
+ @Override
+ public boolean hasNext() {
+ return node instanceof NonEmptyFloatList;
+ }
+
+ @Override
+ public Float next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ NonEmptyFloatList nn = (NonEmptyFloatList) node;
+ Float r = nn.getHead();
+ node = nn.getTail();
+ return r;
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ };
+
+ }
+
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyIntegerList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyIntegerList.java?rev=1774604&r1=1774603&r2=1774604&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyIntegerList.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyIntegerList.java Fri Dec 16 14:46:32 2016
@@ -19,10 +19,13 @@
package org.apache.uima.jcas.cas;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.JCasRegistry;
-public class NonEmptyIntegerList extends IntegerList {
+public class NonEmptyIntegerList extends IntegerList implements Iterable<Integer> {
public final static int typeIndexID = JCasRegistry.register(NonEmptyIntegerList.class);
@@ -44,6 +47,17 @@ public class NonEmptyIntegerList extends
public NonEmptyIntegerList(JCas jcas) {
super(jcas);
}
+
+ /**
+ * @param jcas the jcas to create this Feature Structure in
+ * @param i the head value
+ * @param tail the tail
+ */
+ public NonEmptyIntegerList(JCas jcas, int i, IntegerList tail) {
+ this(jcas);
+ setHead(i);
+ setTail(tail);
+ }
// *------------------*
// * Feature: head
@@ -83,4 +97,35 @@ public class NonEmptyIntegerList extends
jcasType.ll_cas.ll_setRefValue(addr, ((NonEmptyIntegerList_Type) jcasType).casFeatCode_tail,
jcasType.ll_cas.ll_getFSRef(v));
}
+
+ @Override
+ public Iterator<Integer> iterator() {
+ return new Iterator<Integer>() {
+
+ IntegerList node = NonEmptyIntegerList.this;
+
+ @Override
+ public boolean hasNext() {
+ return node instanceof NonEmptyIntegerList;
+ }
+
+ @Override
+ public Integer next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ NonEmptyIntegerList nn = (NonEmptyIntegerList) node;
+ Integer r = nn.getHead();
+ node = nn.getTail();
+ return r;
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ };
+
+ }
+
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyStringList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyStringList.java?rev=1774604&r1=1774603&r2=1774604&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyStringList.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyStringList.java Fri Dec 16 14:46:32 2016
@@ -25,7 +25,7 @@ import java.util.NoSuchElementException;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.JCasRegistry;
-public class NonEmptyStringList extends StringList implements Iterable<String> {
+public class NonEmptyStringList extends StringList {
public final static int typeIndexID = JCasRegistry.register(NonEmptyStringList.class);
@@ -47,6 +47,17 @@ public class NonEmptyStringList extends
public NonEmptyStringList(JCas jcas) {
super(jcas);
}
+
+ /**
+ * @param jcas the JCas create the new Feature Structure in
+ * @param s the head item
+ * @param tail the tail item
+ */
+ public NonEmptyStringList(JCas jcas, String s, StringList tail) {
+ this(jcas);
+ setHead(s);
+ setTail(tail);
+ }
// *------------------*
// * Feature: head
@@ -116,5 +127,5 @@ public class NonEmptyStringList extends
}
};
- }
+ }
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ShortArray.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ShortArray.java?rev=1774604&r1=1774603&r2=1774604&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ShortArray.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ShortArray.java Fri Dec 16 14:46:32 2016
@@ -19,12 +19,15 @@
package org.apache.uima.jcas.cas;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
import org.apache.uima.cas.ShortArrayFS;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.JCasRegistry;
/** JCas class model for ShortArray */
-public final class ShortArray extends TOP implements ShortArrayFS {
+public final class ShortArray extends TOP implements ShortArrayFS, Iterable<Short> {
/**
* Each cover class when loaded sets an index. Used in the JCas typeArray to go from the cover
* class or class instance to the corresponding instance of the _Type class
@@ -140,4 +143,29 @@ public final class ShortArray extends TO
copyToArray(0, strArray, 0, size);
return strArray;
}
+
+ @Override
+ public Iterator<Short> iterator() {
+ return new Iterator<Short>() {
+ int i = 0;
+
+ @Override
+ public boolean hasNext() {
+ return i < size();
+ }
+
+ @Override
+ public Short next() {
+ if (!hasNext())
+ throw new NoSuchElementException();
+ return get(i++);
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ };
+ }
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringList.java?rev=1774604&r1=1774603&r2=1774604&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringList.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringList.java Fri Dec 16 14:46:32 2016
@@ -81,4 +81,13 @@ public class StringList extends org.apac
public Iterator<String> iterator() {
return Collections.emptyIterator(); // NonEmptyStringList overrides
}
+
+ /**
+ * pushes a String onto front of this list
+ * @param s the String to push
+ * @return the new list, with this String as the first element's head value
+ */
+ public NonEmptyStringList push(String s) {
+ return new NonEmptyStringList(this.jcasType.jcas, s, this);
+ }
}
Modified: uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/jcas/test/JCasTest.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/jcas/test/JCasTest.java?rev=1774604&r1=1774603&r2=1774604&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/jcas/test/JCasTest.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/jcas/test/JCasTest.java Fri Dec 16 14:46:32 2016
@@ -19,6 +19,7 @@
package org.apache.uima.jcas.test;
+import java.util.Arrays;
import java.util.Iterator;
import junit.framework.TestCase;
@@ -38,19 +39,28 @@ import org.apache.uima.cas.impl.LowLevel
import org.apache.uima.cas.impl.LowLevelIndexRepository;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.JFSIndexRepository;
+import org.apache.uima.jcas.cas.BooleanArray;
+import org.apache.uima.jcas.cas.ByteArray;
import org.apache.uima.jcas.cas.DoubleArray;
import org.apache.uima.jcas.cas.EmptyFSList;
import org.apache.uima.jcas.cas.EmptyFloatList;
import org.apache.uima.jcas.cas.EmptyIntegerList;
import org.apache.uima.jcas.cas.EmptyStringList;
import org.apache.uima.jcas.cas.FSArray;
+import org.apache.uima.jcas.cas.FSList;
import org.apache.uima.jcas.cas.FloatArray;
+import org.apache.uima.jcas.cas.FloatList;
import org.apache.uima.jcas.cas.IntegerArray;
+import org.apache.uima.jcas.cas.IntegerList;
+import org.apache.uima.jcas.cas.LongArray;
import org.apache.uima.jcas.cas.NonEmptyFSList;
import org.apache.uima.jcas.cas.NonEmptyFloatList;
import org.apache.uima.jcas.cas.NonEmptyIntegerList;
import org.apache.uima.jcas.cas.NonEmptyStringList;
+import org.apache.uima.jcas.cas.ShortArray;
import org.apache.uima.jcas.cas.StringArray;
+import org.apache.uima.jcas.cas.StringList;
+import org.apache.uima.jcas.cas.TOP;
import org.apache.uima.jcas.cas.TOP_Type;
import org.apache.uima.jcas.tcas.Annotation;
import org.apache.uima.jcas.tcas.Annotation_Type;
@@ -759,7 +769,146 @@ public class JCasTest extends TestCase {
JUnitExtension.handleException(e);
}
}
+
+ public void testStringListAPI() {
+ StringList sl = new EmptyStringList(jcas);
+ sl = sl.push("2");
+ sl = sl.push("1");
+
+ String[] sa = new String[2];
+ int i = 0;
+ for (String s : sl) {
+ sa[i++] = s;
+ }
+
+ String[] expected = {"1", "2"};
+ assert(Arrays.equals(expected, sa));
+ }
+
+ public void testStringArrayAPI() {
+ StringArray sa = new StringArray(jcas, 3);
+ String[] values = {"1", "2", "3"};
+ sa.copyFromArray(values, 0, 0, 3);
+
+ int i = 0;
+ for (String s : sa) {
+ assert(s.equals(values[i++]));
+ }
+ }
+
+ public void testFSListAPI() {
+ FSList sl = new EmptyFSList(jcas);
+ TOP fs1 = new TOP(jcas);
+ TOP fs2 = new TOP(jcas);
+ sl = sl.push(fs2);
+ sl = sl.push(fs1);
+
+ TOP[] fss = new TOP[2];
+ int i = 0;
+ for (TOP s : sl) {
+ fss[i++] = s;
+ }
+
+ TOP[] expected = {fs1, fs2};
+ assert(Arrays.equals(expected, fss));
+ }
+
+ public void testFSArrayAPI() {
+ FSArray sa = new FSArray(jcas, 2);
+ TOP fs1 = new TOP(jcas);
+ TOP fs2 = new TOP(jcas);
+ TOP[] values = {fs1, fs2};
+ sa.copyFromArray(values, 0, 0, 2);
+
+ int i = 0;
+ for (FeatureStructure s : sa) {
+ assert(s.equals(values[i++]));
+ }
+ }
+ public void testOtherListAPI() {
+ // float and integer
+ IntegerList sl = new EmptyIntegerList(jcas);
+ sl = sl.push(2);
+ sl = sl.push(1);
+
+ int[] fss = new int[2];
+ int i = 0;
+ for (int s : sl) {
+ fss[i++] = s;
+ }
+
+ int[] expected = {1, 2};
+ assert(Arrays.equals(expected, fss));
+
+ FloatList fl = new EmptyFloatList(jcas);
+ fl = fl.push(2.0F);
+ fl = fl.push(1.0F);
+ float[] fls = new float[2];
+ i = 0;
+ for (float f : fl) {
+ fls[i++] = f;
+ }
+
+ float[] expectedFloats = {1.0f, 2.0f};
+ assert(Arrays.equals(expectedFloats, fls));
+
+ BooleanArray boa = new BooleanArray(jcas, 2);
+ boa.set(0, true);
+ boa.set(1, false);
+ boolean[] expectedBa = {true, false};
+ i = 0;
+ for (boolean bov : boa) {
+ assertEquals(expectedBa[i++], bov);
+ }
+
+ ByteArray bya = new ByteArray(jcas, 2);
+ bya.set(0, (byte)15);
+ bya.set(1, (byte)22);
+ byte[] expectedBya = {15, 22};
+ i = 0;
+ for (byte v : bya) {
+ assertEquals(expectedBya[i++], v);
+ }
+
+ ShortArray sha = new ShortArray(jcas, 2);
+ sha.set(0, (short)15);
+ sha.set(1, (short)22);
+ short[] expectedSha = {15, 22};
+ i = 0;
+ for (short v : sha) {
+ assertEquals(expectedSha[i++], v);
+ }
+
+ IntegerArray ina = new IntegerArray(jcas, 2);
+ ina.set(0, (int)15);
+ ina.set(1, (int)22);
+ int[] expectedIna = {15, 22};
+ i = 0;
+ for (int v : ina) {
+ assertEquals(expectedIna[i++], v);
+ }
+
+ LongArray loa = new LongArray(jcas, 2);
+ loa.set(0, (long)15);
+ loa.set(1, (long)22);
+ long[] expectedLoa = {15, 22};
+ i = 0;
+ for (long v : loa) {
+ assertEquals(expectedLoa[i++], v);
+ }
+
+ DoubleArray doa = new DoubleArray(jcas, 2);
+ doa.set(0, (double)15);
+ doa.set(1, (double)22);
+ Double[] expectedDoa = {15d, 22d};
+ i = 0;
+ for (double v : doa) {
+ assertEquals(expectedDoa[i++], v);
+ }
+
+ }
+
public void testUndefinedType() throws Exception {
//create jcas with no type system
JCas jcas = CasCreationUtils.createCas(new TypeSystemDescription_impl(), null, null).getJCas();