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 2015/11/02 13:19:46 UTC

svn commit: r1711942 [1/2] - /uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/

Author: schor
Date: Mon Nov  2 12:19:46 2015
New Revision: 1711942

URL: http://svn.apache.org/viewvc?rev=1711942&view=rev
Log:
[UIMA-4663] update built-in JCas cover objects for v3

Added:
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/JavaObjectArray.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyList.java
Modified:
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/BooleanArray.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ByteArray.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/DoubleArray.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyFSList.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyFloatList.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyIntegerList.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyStringList.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSArray.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatArray.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatList.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArray.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerList.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/LongArray.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFloatList.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyIntegerList.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyStringList.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ShortArray.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/Sofa.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringArray.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringList.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/TOP.java

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/BooleanArray.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/BooleanArray.java?rev=1711942&r1=1711941&r2=1711942&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/BooleanArray.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/BooleanArray.java Mon Nov  2 12:19:46 2015
@@ -20,11 +20,13 @@
 package org.apache.uima.jcas.cas;
 
 import org.apache.uima.cas.BooleanArrayFS;
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.TypeImpl;
 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 CommonPrimitiveArray, BooleanArrayFS {
   /**
    * 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
@@ -43,13 +45,14 @@ public final class BooleanArray extends
     return typeIndexID;
   }
 
+  /* local data */
+  private final boolean[] theArray;
+
+ 
   // never called. Here to disable default constructor
+  @SuppressWarnings("unused")
   private BooleanArray() {
-  }
-
- /* Internal - Constructor used by generator */
-  public BooleanArray(int addr, TOP_Type type) {
-    super(addr, type);
+    theArray = null;
   }
 
   /**
@@ -58,79 +61,79 @@ public final class BooleanArray extends
    * @param length of array
    */
   public BooleanArray(JCas jcas, int length) {
-    this(jcas.getLowLevelCas().ll_createBooleanArray(length), jcas.getType(typeIndexID));
+    super(jcas);
+    theArray = new boolean[length];
+  }
+  
+  /**
+   * Called by generator 
+   * @param c -
+   * @param t -
+   * @param l -
+   */
+  public BooleanArray(TypeImpl t, CASImpl c, int l) {
+    super(t, c);
+    theArray = new boolean[l];
   }
 
   /**
    * @see org.apache.uima.cas.BooleanArrayFS#get(int)
    */
   public boolean get(int i) {
-    jcasType.casImpl.checkArrayBounds(addr, i);
-    return jcasType.ll_cas.ll_getBooleanArrayValue(addr, i);
+    return theArray[i];
   }
 
   /**
    * @see org.apache.uima.cas.BooleanArrayFS#set(int , boolean)
    */
   public void set(int i, boolean v) {
-    jcasType.casImpl.checkArrayBounds(addr, i);
-    jcasType.ll_cas.ll_setBooleanArrayValue(addr, i, v);
+    theArray[i] = v;
+    _casView.maybeLogArrayUpdate(this, null, i);
   }
 
   /**
    * @see org.apache.uima.cas.BooleanArrayFS#copyFromArray(boolean[], int, int, int)
    */
-  public void copyFromArray(boolean[] src, int srcOffset, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, destOffset, length);
-    for (int i = 0; i < length; i++) {
-      jcasType.ll_cas.ll_setBooleanArrayValue(addr, i + destOffset, src[i + srcOffset]);
-    }
+  public void copyFromArray(boolean[] src, int srcPos, int destPos, int length) {
+    System.arraycopy(src, srcPos, theArray, destPos, length);
   }
 
   /**
    * @see org.apache.uima.cas.BooleanArrayFS#copyToArray(int, boolean[], int, int)
    */
-  public void copyToArray(int srcOffset, boolean[] dest, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, srcOffset, length);
-    for (int i = 0; i < length; i++) {
-      dest[i + destOffset] = jcasType.ll_cas.ll_getBooleanArrayValue(addr, i + srcOffset);
-    }
+  public void copyToArray(int srcPos, boolean[] dest, int destPos, int length) {
+    System.arraycopy(theArray, srcPos, dest, destPos, length);
   }
 
   /**
    * @see org.apache.uima.cas.BooleanArrayFS#toArray()
    */
   public boolean[] toArray() {
-    final int size = size();
-    boolean[] outArray = new boolean[size];
-    copyToArray(0, outArray, 0, size);
-    return outArray;
+    return theArray.clone();
   }
 
   /** return the size of the array */
   public int size() {
-    return jcasType.casImpl.ll_getArraySize(addr);
+    return theArray.length;
   }
 
   /**
    * @see org.apache.uima.cas.BooleanArrayFS#copyToArray(int, String[], int, int)
    */
-  public void copyToArray(int srcOffset, String[] dest, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, srcOffset, length);
+  public void copyToArray(int srcPos, String[] dest, int destPos, int length) {
+    _casView.checkArrayBounds(theArray.length, srcPos, length);
     for (int i = 0; i < length; i++) {
-      dest[i + destOffset] = Boolean.toString(jcasType.ll_cas.ll_getBooleanArrayValue(addr, i
-              + srcOffset));
+      dest[i + destPos] = Boolean.toString(theArray[i + srcPos]);
     }
   }
 
   /**
    * @see org.apache.uima.cas.BooleanArrayFS#copyFromArray(String[], int, int, int)
    */
-  public void copyFromArray(String[] src, int srcOffset, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, destOffset, length);
+  public void copyFromArray(String[] src, int srcPos, int destPos, int length) {
+    _casView.checkArrayBounds(theArray.length, srcPos, length);
     for (int i = 0; i < length; i++) {
-      jcasType.ll_cas.ll_setBooleanArrayValue(addr, i + destOffset, "true".equalsIgnoreCase(src[i
-              + srcOffset]));
+      theArray[i + destPos] = Boolean.parseBoolean(src[i + srcPos]);
     }
   }
 
@@ -140,4 +143,14 @@ public final class BooleanArray extends
     copyToArray(0, strArray, 0, size);
     return strArray;
   }
+  
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonArray#copyValuesFrom(org.apache.uima.jcas.cas.CommonArray)
+   */
+  @Override
+  public void copyValuesFrom(CommonArray v) {
+    BooleanArray bv = (BooleanArray) v;
+    System.arraycopy(bv.theArray,  0,  theArray, 0, theArray.length);
+  }
+  
 }

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ByteArray.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ByteArray.java?rev=1711942&r1=1711941&r2=1711942&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ByteArray.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ByteArray.java Mon Nov  2 12:19:46 2015
@@ -20,11 +20,13 @@
 package org.apache.uima.jcas.cas;
 
 import org.apache.uima.cas.ByteArrayFS;
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.TypeImpl;
 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 CommonPrimitiveArray, ByteArrayFS {
   /**
    * 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
@@ -43,13 +45,11 @@ public final class ByteArray extends TOP
     return typeIndexID;
   }
 
+  private final byte[] theArray;
   // never called. Here to disable default constructor
+  @SuppressWarnings("unused")
   private ByteArray() {
-  }
-
- /* Internal - Constructor used by generator */
-  public ByteArray(int addr, TOP_Type type) {
-    super(addr, type);
+    theArray = null;
   }
 
   /**
@@ -58,79 +58,80 @@ public final class ByteArray extends TOP
    * @param length the length of the array in bytes
    */
   public ByteArray(JCas jcas, int length) {
-    this(jcas.getLowLevelCas().ll_createByteArray(length), jcas.getType(typeIndexID));
+    super(jcas);  
+    theArray = new byte[length];
+  }
+
+  /**
+   * used by generator
+   * Make a new ByteArray of given size
+   * @param c -
+   * @param t -
+   * @param length the length of the array in bytes
+   */
+  public ByteArray(TypeImpl t, CASImpl c, int length) {
+    super(t, c);  
+    theArray = new byte[length];
   }
 
   /**
    * @see org.apache.uima.cas.ByteArrayFS#get(int)
    */
   public byte get(int i) {
-    jcasType.casImpl.checkArrayBounds(addr, i);
-    return jcasType.ll_cas.ll_getByteArrayValue(addr, i);
+    return theArray[i];
   }
 
   /**
    * @see org.apache.uima.cas.ByteArrayFS#set(int , byte)
    */
   public void set(int i, byte v) {
-    jcasType.casImpl.checkArrayBounds(addr, i);
-    jcasType.ll_cas.ll_setByteArrayValue(addr, i, v);
+    theArray[i] = v;
+    _casView.maybeLogArrayUpdate(this, null, i); 
   }
 
   /**
    * @see org.apache.uima.cas.ByteArrayFS#copyFromArray(byte[], int, int, int)
    */
-  public void copyFromArray(byte[] src, int srcOffset, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, destOffset, length);
-    for (int i = 0; i < length; i++) {
-      jcasType.ll_cas.ll_setByteArrayValue(addr, i + destOffset, src[i + srcOffset]);
-    }
+  public void copyFromArray(byte[] src, int srcPos, int destPos, int length) {
+    System.arraycopy(src, srcPos, theArray, destPos, length);
   }
 
   /**
    * @see org.apache.uima.cas.ByteArrayFS#copyToArray(int, byte[], int, int)
    */
-  public void copyToArray(int srcOffset, byte[] dest, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, srcOffset, length);
-    for (int i = 0; i < length; i++) {
-      dest[i + destOffset] = jcasType.ll_cas.ll_getByteArrayValue(addr, i + srcOffset);
-    }
-  }
+  public void copyToArray(int srcPos, byte[] dest, int destPos, int length) {
+    System.arraycopy(theArray, srcPos, dest, destPos, length);
+   }
 
   /**
    * @see org.apache.uima.cas.ByteArrayFS#toArray()
    */
   public byte[] toArray() {
-    final int size = size();
-    byte[] outArray = new byte[size];
-    copyToArray(0, outArray, 0, size);
-    return outArray;
+    return theArray.clone();
   }
 
   /** return the size of the array */
   public int size() {
-    return jcasType.casImpl.ll_getArraySize(addr);
+    return theArray.length;
   }
 
   /**
    * @see org.apache.uima.cas.ByteArrayFS#copyToArray(int, String[], int, int)
    */
-  public void copyToArray(int srcOffset, String[] dest, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, srcOffset, length);
+  public void copyToArray(int srcPos, String[] dest, int destPos, int length) {
+    _casView.checkArrayBounds(theArray.length, srcPos, length);
     for (int i = 0; i < length; i++) {
-      dest[i + destOffset] = Byte.toString(jcasType.ll_cas
-              .ll_getByteArrayValue(addr, i + srcOffset));
+      dest[i + destPos] = Byte.toString(theArray[i + srcPos]);
     }
   }
 
   /**
    * @see org.apache.uima.cas.ByteArrayFS#copyFromArray(String[], int, int, int)
    */
-  public void copyFromArray(String[] src, int srcOffset, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, destOffset, length);
+  public void copyFromArray(String[] src, int srcPos, int destPos, int length) {
+    _casView.checkArrayBounds(theArray.length, destPos, length);
     for (int i = 0; i < length; i++) {
-      jcasType.ll_cas
-              .ll_setByteArrayValue(addr, i + destOffset, Byte.parseByte(src[i + srcOffset]));
+      theArray[i + destPos] = Byte.parseByte(src[i + srcPos]);
     }
   }
 
@@ -140,4 +141,19 @@ public final class ByteArray extends TOP
     copyToArray(0, strArray, 0, size);
     return strArray;
   }
+  
+  // internal use
+  public byte[] _getTheArray() {
+    return theArray;
+  }
+  
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonArray#copyValuesFrom(org.apache.uima.jcas.cas.CommonArray)
+   */
+  @Override
+  public void copyValuesFrom(CommonArray v) {
+    ByteArray bv = (ByteArray) v;
+    System.arraycopy(bv.theArray,  0,  theArray, 0, theArray.length);
+  }
+
 }

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/DoubleArray.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/DoubleArray.java?rev=1711942&r1=1711941&r2=1711942&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/DoubleArray.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/DoubleArray.java Mon Nov  2 12:19:46 2015
@@ -20,11 +20,13 @@
 package org.apache.uima.jcas.cas;
 
 import org.apache.uima.cas.DoubleArrayFS;
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.TypeImpl;
 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 CommonPrimitiveArray, DoubleArrayFS {
   /**
    * 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
@@ -43,13 +45,12 @@ public final class DoubleArray extends T
     return typeIndexID;
   }
 
+  private final double[] theArray;
+  
   // never called. Here to disable default constructor
+  @SuppressWarnings("unused")
   private DoubleArray() {
-  }
-
- /* Internal - Constructor used by generator */
-  public DoubleArray(int addr, TOP_Type type) {
-    super(addr, type);
+    theArray = null;
   }
 
   /**
@@ -58,79 +59,80 @@ public final class DoubleArray extends T
    * @param length the length of the array 
    */
   public DoubleArray(JCas jcas, int length) {
-    this(jcas.getLowLevelCas().ll_createDoubleArray(length), jcas.getType(typeIndexID));
+    super(jcas);
+    theArray = new double[length];
+  }
+  
+  /**
+   * used by generator
+   * Make a new DoubleArray of given size
+   * @param c -
+   * @param t -
+   * @param length the length of the array in bytes
+   */
+  public DoubleArray(TypeImpl t, CASImpl c, int length) {
+    super(t, c);  
+    theArray = new double[length];
   }
 
   /**
    * @see org.apache.uima.cas.DoubleArrayFS#get(int)
    */
   public double get(int i) {
-    jcasType.casImpl.checkArrayBounds(addr, i);
-    return jcasType.ll_cas.ll_getDoubleArrayValue(addr, i);
+    return theArray[i];
   }
 
   /**
    * @see org.apache.uima.cas.DoubleArrayFS#set(int , double)
    */
   public void set(int i, double v) {
-    jcasType.casImpl.checkArrayBounds(addr, i);
-    jcasType.ll_cas.ll_setDoubleArrayValue(addr, i, v);
+    theArray[i] = v;
+    _casView.maybeLogArrayUpdate(this, null, i);
   }
 
   /**
    * @see org.apache.uima.cas.DoubleArrayFS#copyFromArray(double[], int, int, int)
    */
-  public void copyFromArray(double[] src, int srcOffset, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, destOffset, length);
-    for (int i = 0; i < length; i++) {
-      jcasType.ll_cas.ll_setDoubleArrayValue(addr, i + destOffset, src[i + srcOffset]);
-    }
+  public void copyFromArray(double[] src, int srcPos, int destPos, int length) {
+    System.arraycopy(src, srcPos, theArray, destPos, length);
   }
 
   /**
    * @see org.apache.uima.cas.DoubleArrayFS#copyToArray(int, double[], int, int)
    */
-  public void copyToArray(int srcOffset, double[] dest, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, srcOffset, length);
-    for (int i = 0; i < length; i++) {
-      dest[i + destOffset] = jcasType.ll_cas.ll_getDoubleArrayValue(addr, i + srcOffset);
-    }
+  public void copyToArray(int srcPos, double[] dest, int destPos, int length) {
+    System.arraycopy(theArray, srcPos, dest, destPos, length);
   }
 
   /**
    * @see org.apache.uima.cas.DoubleArrayFS#toArray()
    */
   public double[] toArray() {
-    final int size = size();
-    double[] outArray = new double[size];
-    copyToArray(0, outArray, 0, size);
-    return outArray;
+    return theArray.clone();
   }
 
   /** return the size of the array */
   public int size() {
-    return jcasType.casImpl.ll_getArraySize(addr);
+    return theArray.length;
   }
 
   /**
    * @see org.apache.uima.cas.DoubleArrayFS#copyToArray(int, String[], int, int)
    */
-  public void copyToArray(int srcOffset, String[] dest, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, srcOffset, length);
+  public void copyToArray(int srcPos, String[] dest, int destPos, int length) {
+    _casView.checkArrayBounds(theArray.length, srcPos, length);
     for (int i = 0; i < length; i++) {
-      dest[i + destOffset] = Double.toString(jcasType.ll_cas.ll_getDoubleArrayValue(addr, i
-              + srcOffset));
+      dest[i + destPos] = Double.toString(theArray[i + srcPos]);
     }
   }
 
   /**
    * @see org.apache.uima.cas.DoubleArrayFS#copyFromArray(String[], int, int, int)
    */
-  public void copyFromArray(String[] src, int srcOffset, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, destOffset, length);
+  public void copyFromArray(String[] src, int srcPos, int destPos, int length) {
+    _casView.checkArrayBounds(theArray.length, destPos, length);
     for (int i = 0; i < length; i++) {
-      jcasType.ll_cas.ll_setDoubleArrayValue(addr, i + destOffset, Double.parseDouble(src[i
-              + srcOffset]));
+      theArray[i + destPos] = Double.parseDouble(src[i + srcPos]);
     }
   }
 
@@ -140,4 +142,19 @@ public final class DoubleArray extends T
     copyToArray(0, strArray, 0, size);
     return strArray;
   }
+  
+  // internal use
+  public double[] _getTheArray() {
+    return theArray;
+  }
+  
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonArray#copyValuesFrom(org.apache.uima.jcas.cas.CommonArray)
+   */
+  @Override
+  public void copyValuesFrom(CommonArray v) {
+    DoubleArray bv = (DoubleArray) v;
+    System.arraycopy(bv.theArray,  0,  theArray, 0, theArray.length);
+  }
+
 }

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyFSList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyFSList.java?rev=1711942&r1=1711941&r2=1711942&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyFSList.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyFSList.java Mon Nov  2 12:19:46 2015
@@ -19,10 +19,12 @@
 
 package org.apache.uima.jcas.cas;
 
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.TypeImpl;
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
-public class EmptyFSList extends FSList {
+public class EmptyFSList extends FSList implements EmptyList {
 
   public final static int typeIndexID = JCasRegistry.register(EmptyFSList.class);
 
@@ -32,17 +34,26 @@ public class EmptyFSList extends FSList
     return typeIndexID;
   }
 
+  public final static EmptyFSList singleton = new EmptyFSList();
+
   // Never called. Disable default constructor
   protected EmptyFSList() {
   }
 
- /* Internal - Constructor used by generator */
-  public EmptyFSList(int addr, TOP_Type type) {
-    super(addr, type);
-  }
-
   public EmptyFSList(JCas jcas) {
     super(jcas);
   }
+  
+  /**
+   * used by generator
+   * Make a new AnnotationBase
+   * @param c -
+   * @param t -
+   */
+
+  public EmptyFSList(TypeImpl t, CASImpl c) {
+    super(t, c);
+  }
+
 
 }

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyFloatList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyFloatList.java?rev=1711942&r1=1711941&r2=1711942&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyFloatList.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyFloatList.java Mon Nov  2 12:19:46 2015
@@ -19,10 +19,12 @@
 
 package org.apache.uima.jcas.cas;
 
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.TypeImpl;
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
-public class EmptyFloatList extends FloatList {
+public class EmptyFloatList extends FloatList implements EmptyList {
 
   public final static int typeIndexID = JCasRegistry.register(EmptyFloatList.class);
 
@@ -32,17 +34,25 @@ public class EmptyFloatList extends Floa
     return typeIndexID;
   }
 
+  public final static EmptyFloatList singleton = new EmptyFloatList();
+
   // Never called. Disable default constructor
   protected EmptyFloatList() {
   }
 
- /* Internal - Constructor used by generator */
-  public EmptyFloatList(int addr, TOP_Type type) {
-    super(addr, type);
-  }
-
   public EmptyFloatList(JCas jcas) {
     super(jcas);
   }
 
+  /**
+   * used by generator
+   * Make a new AnnotationBase
+   * @param c -
+   * @param t -
+   */
+
+  public EmptyFloatList(TypeImpl t, CASImpl c) {
+    super(t, c);
+  }
+
 }

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyIntegerList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyIntegerList.java?rev=1711942&r1=1711941&r2=1711942&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyIntegerList.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyIntegerList.java Mon Nov  2 12:19:46 2015
@@ -19,10 +19,12 @@
 
 package org.apache.uima.jcas.cas;
 
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.TypeImpl;
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
-public class EmptyIntegerList extends IntegerList {
+public class EmptyIntegerList extends IntegerList implements EmptyList {
 
   public final static int typeIndexID = JCasRegistry.register(EmptyIntegerList.class);
 
@@ -32,17 +34,25 @@ public class EmptyIntegerList extends In
     return typeIndexID;
   }
 
+  public final static EmptyIntegerList singleton = new EmptyIntegerList();
+
   // Never called. Disable default constructor
   protected EmptyIntegerList() {
   }
 
- /* Internal - Constructor used by generator */
-  public EmptyIntegerList(int addr, TOP_Type type) {
-    super(addr, type);
-  }
-
   public EmptyIntegerList(JCas jcas) {
     super(jcas);
   }
 
+  /**
+   * used by generator
+   * Make a new AnnotationBase
+   * @param c -
+   * @param t -
+   */
+
+  public EmptyIntegerList(TypeImpl t, CASImpl c) {
+    super(t, c);
+  }
+
 }

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyStringList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyStringList.java?rev=1711942&r1=1711941&r2=1711942&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyStringList.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyStringList.java Mon Nov  2 12:19:46 2015
@@ -19,10 +19,12 @@
 
 package org.apache.uima.jcas.cas;
 
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.TypeImpl;
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
-public class EmptyStringList extends StringList {
+public class EmptyStringList extends StringList implements EmptyList {
 
   public final static int typeIndexID = JCasRegistry.register(EmptyStringList.class);
 
@@ -31,18 +33,26 @@ public class EmptyStringList extends Str
   public int getTypeIndexID() {
     return typeIndexID;
   }
+  
+  public final static EmptyStringList singleton = new EmptyStringList();
 
   // Never called. Disable default constructor
   protected EmptyStringList() {
   }
 
- /* Internal - Constructor used by generator */
-  public EmptyStringList(int addr, TOP_Type type) {
-    super(addr, type);
-  }
-
   public EmptyStringList(JCas jcas) {
     super(jcas);
   }
 
+  /**
+   * used by generator
+   * Make a new AnnotationBase
+   * @param c -
+   * @param t -
+   */
+
+  public EmptyStringList(TypeImpl t, CASImpl c) {
+    super(t, c);
+  }
+
 }

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSArray.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSArray.java?rev=1711942&r1=1711941&r2=1711942&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSArray.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSArray.java Mon Nov  2 12:19:46 2015
@@ -22,12 +22,13 @@ package org.apache.uima.jcas.cas;
 import org.apache.uima.cas.ArrayFS;
 import org.apache.uima.cas.FeatureStructure;
 import org.apache.uima.cas.impl.CASImpl;
-import org.apache.uima.cas.impl.LowLevelCAS;
+import org.apache.uima.cas.impl.FeatureStructureImplC;
+import org.apache.uima.cas.impl.TypeImpl;
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
 /** Java Class model for Cas FSArray type */
-public final class FSArray extends TOP implements ArrayFS {
+public final class FSArray extends TOP implements CommonArray, ArrayFS {
 
   /**
    * each cover class when loaded sets an index. used in the JCas typeArray to go from the cover
@@ -47,13 +48,12 @@ public final class FSArray extends TOP i
     return typeIndexID;
   }
 
+  private final FeatureStructureImplC[] theArray;
+  
   // never called. Here to disable default constructor
+  @SuppressWarnings("unused")
   private FSArray() {
-  }
-
- /* Internal - Constructor used by generator */
-  public FSArray(int addr, TOP_Type type) {
-    super(addr, type);
+    theArray = null;
   }
 
   /**
@@ -62,106 +62,90 @@ public final class FSArray extends TOP i
    * @param length The number of elements in the new array
    */
   public FSArray(JCas jcas, int length) {
-    this(
-    /* addr */jcas.getLowLevelCas().ll_createArray(jcas.getType(typeIndexID).casTypeCode, length),
-    /* type */jcas.getType(typeIndexID));
-
-    // at this point we can use the jcasType value, as it is set
-    // can't do this earlier as the very first statement is required by
-    // JAVA to be the super or alternate constructor call
-    jcasType.casImpl.checkArrayPreconditions(length);
-  }
-
-  // /** create a new FSArray of a given size.
-  // *
-  // * @param jcas
-  // * @param length
-  // */
-  //  
-  // public FSArray create(JCas jcas, int length){
-  // return new FSArray(jcas, length);
-  // }
+    super(jcas);
+    _casView.validateArraySize(length);
+    theArray = new FeatureStructureImplC[length];
+  }
+  
+  /**
+   * used by generator
+   * Make a new FSArray of given size
+   * @param c -
+   * @param t -
+   * @param length the length of the array
+   */
+  public FSArray(TypeImpl t, CASImpl c, int length) {
+    super(t, c);  
+    _casView.validateArraySize(length);
+    theArray = new FeatureStructureImplC[length];
+  }
+
 
   /** return the indexed value from the corresponding Cas FSArray as a Java Model object. */
   public FeatureStructure get(int i) {
-    jcasType.casImpl.checkArrayBounds(addr, i);
-    final LowLevelCAS ll_cas = jcasType.ll_cas;
-    return ll_cas.ll_getFSForRef(ll_cas.ll_getRefArrayValue(addr, i));
+    return theArray[i];
   }
 
   /** updates the Cas, setting the indexed value with the corresponding Cas FeatureStructure. */
   public void set(int i, FeatureStructure v) {
-    jcasType.casImpl.checkArrayBounds(addr, i);
-    jcasType.ll_cas.ll_setRefArrayValue(addr, i, jcasType.ll_cas.ll_getFSRef(v));
+    theArray[i] = (FeatureStructureImplC) v;
   }
 
   /** return the size of the array. */
   public int size() {
-    return jcasType.casImpl.ll_getArraySize(addr);
+    return theArray.length;
   }
 
   /**
    * @see org.apache.uima.cas.ArrayFS#copyFromArray(FeatureStructure[], int, int, int)
    */
-  public void copyFromArray(FeatureStructure[] src, int srcOffset, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, destOffset, length);
-    for (int i = 0; i < length; i++) {
-      jcasType.ll_cas.ll_setRefArrayValue(addr, i + destOffset, jcasType.ll_cas.ll_getFSRef(src[i
-              + srcOffset]));
-    }
+  public void copyFromArray(FeatureStructure[] src, int srcPos, int destPos, int length) {
+    System.arraycopy(src, srcPos, theArray, destPos, length);
   }
 
   /**
    * @see org.apache.uima.cas.ArrayFS#copyToArray(int, FeatureStructure[], int, int)
    */
-  public void copyToArray(int srcOffset, FeatureStructure[] dest, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, srcOffset, length);
-    for (int i = 0; i < length; i++) {
-      dest[i + destOffset] = jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefArrayValue(
-              addr, i + srcOffset));
-    }
+  public void copyToArray(int srcPos, FeatureStructure[] dest, int destPos, int length) {
+    System.arraycopy(theArray, srcPos, dest, destPos, length);
   }
 
   /**
    * @see org.apache.uima.cas.ArrayFS#toArray()
    */
   public FeatureStructure[] toArray() {
-    final int size = size();
-    FeatureStructure[] outArray = new FeatureStructure[size];
-    copyToArray(0, outArray, 0, size);
-    return outArray;
+    return theArray.clone();
   }
 
   /**
    * Not supported, will throw UnsupportedOperationException
    */
-  public void copyFromArray(String[] src, int srcOffset, int destOffset, int length) {
+  public void copyFromArray(String[] src, int srcPos, int destPos, int length) {
     throw new UnsupportedOperationException();
   }
     
   /**
    * Copies an array of Feature Structures to an Array of Strings.
    * The strings are the "toString()" representation of the feature structures, 
-   * which are probably something that looks like FeatureStructure@123456
    * 
-   * @param srcOffset
+   * @param srcPos
    *                The index of the first element to copy.
    * @param dest
    *                The array to copy to.
-   * @param destOffset
+   * @param destPos
    *                Where to start copying into <code>dest</code>.
    * @param length
    *                The number of elements to copy.
    * @exception ArrayIndexOutOfBoundsException
-   *                    If <code>srcOffset &lt; 0</code> or
+   *                    If <code>srcPos &lt; 0</code> or
    *                    <code>length &gt; size()</code> or
-   *                    <code>destOffset + length &gt; destArray.length</code>.
+   *                    <code>destPos + length &gt; destArray.length</code>.
    */
-  public void copyToArray(int srcOffset, String[] dest, int destOffset, int length) {
-    CASImpl ll = jcasType.casImpl;
-    ll.checkArrayBounds(addr, srcOffset, length);
+  public void copyToArray(int srcPos, String[] dest, int destPos, int length) {
+    _casView.checkArrayBounds(theArray.length, srcPos, length);
     for (int i = 0; i < length; i++) {
-      dest[i + destOffset] = ll.ll_getFSForRef(ll.ll_getRefArrayValue(this.addr, i + srcOffset)).toString();
+      FeatureStructureImplC fs = theArray[i + srcPos];
+      dest[i + destPos] = (fs == null) ? null : fs.toString();
     }
   }
 
@@ -172,4 +156,18 @@ public final class FSArray extends TOP i
     return strArray;
   }
 
+  // internal use
+  public FeatureStructureImplC[] _getTheArray() {
+    return theArray;
+  }
+  
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonArray#copyValuesFrom(org.apache.uima.jcas.cas.CommonArray)
+   */
+  @Override
+  public void copyValuesFrom(CommonArray v) {
+    FSArray bv = (FSArray) v;
+    System.arraycopy(bv.theArray,  0,  theArray, 0, theArray.length);
+  }
+
 }

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java?rev=1711942&r1=1711941&r2=1711942&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java Mon Nov  2 12:19:46 2015
@@ -20,55 +20,70 @@
 package org.apache.uima.jcas.cas;
 
 import org.apache.uima.cas.CASRuntimeException;
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.TypeImpl;
 import org.apache.uima.jcas.JCas;
-import org.apache.uima.jcas.JCasRegistry;
 
-public class FSList extends org.apache.uima.jcas.cas.TOP {
-
-	public final static int typeIndexID = JCasRegistry.register(FSList.class);
-
-	public final static int type = typeIndexID;
-
-	public int getTypeIndexID() {
-		return typeIndexID;
-	}
+public abstract class FSList extends CommonList {
 
 	// Never called.
 	protected FSList() {// Disable default constructor
 	}
 
-	/* Internal - Constructor used by generator */
-	public FSList(int addr, TOP_Type type) {
-		super(addr, type);
-	}
-
 	public FSList(JCas jcas) {
 		super(jcas);
 	}
 
-	public TOP getNthElement(int i) {
-		if (this instanceof EmptyFSList) {
-			CASRuntimeException casEx = new CASRuntimeException(
-					CASRuntimeException.JCAS_GET_NTH_ON_EMPTY_LIST, new String[] { "EmptyFSList" });
-			throw casEx;
-		}
-		if (i < 0) {
-			CASRuntimeException casEx = new CASRuntimeException(
-					CASRuntimeException.JCAS_GET_NTH_NEGATIVE_INDEX, new String[] { Integer.toString(i) });
-			throw casEx;
-		}
-		int originali = i;
-		FSList cg = this;
-		for (;; i--) {
-			if (cg instanceof EmptyFSList) {
-				CASRuntimeException casEx = new CASRuntimeException(
-						CASRuntimeException.JCAS_GET_NTH_PAST_END, new String[] { Integer.toString(originali) });
-				throw casEx;
-			}
-			NonEmptyFSList c = (NonEmptyFSList) cg;
-			if (i == 0)
-				return c.getHead();
-			cg = c.getTail();
-		}
-	}
+  /**
+  * used by generator
+  * Make a new AnnotationBase
+  * @param c -
+  * @param t -
+  */
+
+   public FSList(TypeImpl t, CASImpl c) {
+     super(t, c);
+   }
+	
+  public NonEmptyFSList createNonEmptyNode(CommonList tail) {
+    NonEmptyFSList node = new NonEmptyFSList(this._typeImpl, this._casView);
+    node.setTail((FSList) tail);
+    return node;
+  }
+  
+  public NonEmptyFSList createNonEmptyNode() { return createNonEmptyNode(null); }
+
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonList#getEmptyNode()
+   */
+  @Override
+  public EmptyFSList getEmptyNode() {
+    return EmptyFSList.singleton;
+  }
+  
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonList#get_headAsString()
+   */
+  @Override
+  public String get_headAsString() {
+    throw new CASRuntimeException(); // not yet impl
+//    return ((NonEmptyFSList)this).getHead().toString();
+  }
+
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonList#getTail()
+   */
+  @Override
+  public CommonList getTail() {
+    return ((NonEmptyFSList)this).getTail();
+  }
+
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonList#setTail(org.apache.uima.jcas.cas.CommonList)
+   */
+  @Override
+  public void setTail(CommonList v) {
+    ((NonEmptyFSList)this).setTail(v);
+  }
+  
 }

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatArray.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatArray.java?rev=1711942&r1=1711941&r2=1711942&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatArray.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatArray.java Mon Nov  2 12:19:46 2015
@@ -20,11 +20,13 @@
 package org.apache.uima.jcas.cas;
 
 import org.apache.uima.cas.FloatArrayFS;
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.TypeImpl;
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
 /** Java Cas model for Cas FloatArray. */
-public final class FloatArray extends TOP implements FloatArrayFS {
+public final class FloatArray extends TOP implements CommonPrimitiveArray, FloatArrayFS {
 
   /**
    * Each cover class when loaded sets an index. Used in the JCas typeArray to go from the cover
@@ -43,17 +45,11 @@ public final class FloatArray extends TO
   public int getTypeIndexID() {
     return typeIndexID;
   }
+  
+  private final float[] theArray;
 
   private FloatArray() { // never called. Here to disable default constructor
-  }
-
-  // * There are n creation actions
-  // * 1 - create via factory.create() a new one
-  // * 2 - iterator or dereferencing calling generator to create
-
- /* Internal - Constructor used by generator */
-  public FloatArray(int addr, TOP_Type type) {
-    super(addr, type);
+    theArray = null;
   }
 
   /**
@@ -62,17 +58,22 @@ public final class FloatArray extends TO
    * @param length the size of the array
    */
   public FloatArray(JCas jcas, int length) {
-    this(
-    /* addr */
-    jcas.getLowLevelCas().ll_createArray(jcas.getType(typeIndexID).casTypeCode, length),
-    /* type */
-    jcas.getType(typeIndexID));
-
-    // at this point we can use the jcasType value, as it is set
-    // can't do this earlier as the very first statement is required by
-    // JAVA to be the super or alternate constructor call
-    jcasType.casImpl.checkArrayPreconditions(length);
+    super(jcas);
+    theArray = new float[length];
   }
+  
+  /**
+   * used by generator
+   * Make a new FloatArray of given size
+   * @param c -
+   * @param t -
+   * @param length the length of the array in bytes
+   */
+  public FloatArray(TypeImpl t, CASImpl c, int length) {
+    super(t, c);  
+    theArray = new float[length];
+  }
+
 
   // /**
   // * create a new FloatArray of a given size.
@@ -89,8 +90,7 @@ public final class FloatArray extends TO
    * return the indexed value from the corresponding Cas FloatArray as a float,
    */
   public float get(int i) {
-    jcasType.casImpl.checkArrayBounds(addr, i);
-    return jcasType.ll_cas.ll_getFloatArrayValue(addr, i);
+    return theArray[i];
   }
 
   /**
@@ -102,38 +102,28 @@ public final class FloatArray extends TO
    *          value to set
    */
   public void set(int i, float v) {
-    jcasType.casImpl.checkArrayBounds(addr, i);
-    jcasType.ll_cas.ll_setFloatArrayValue(addr, i, v);
+    theArray[i] = v;
   }
 
   /**
    * @see org.apache.uima.cas.FloatArrayFS#copyFromArray(float[], int, int, int)
    */
-  public void copyFromArray(float[] src, int srcOffset, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, destOffset, length);
-    for (int i = 0; i < length; i++) {
-      jcasType.ll_cas.ll_setFloatArrayValue(addr, i + destOffset, src[i + srcOffset]);
-    }
+  public void copyFromArray(float[] src, int srcPos, int destPos, int length) {
+    System.arraycopy(src, srcPos, theArray, destPos, length);
   }
 
   /**
    * @see org.apache.uima.cas.FloatArrayFS#copyToArray(int, float[], int, int)
    */
-  public void copyToArray(int srcOffset, float[] dest, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, srcOffset, length);
-    for (int i = 0; i < length; i++) {
-      dest[i + destOffset] = jcasType.ll_cas.ll_getFloatArrayValue(addr, i + srcOffset);
-    }
+  public void copyToArray(int srcPos, float[] dest, int destPos, int length) {
+    System.arraycopy(theArray, srcPos, dest, destPos, length);
   }
 
   /**
    * @see org.apache.uima.cas.ArrayFS#toArray()
    */
   public float[] toArray() {
-    final int size = size();
-    float[] outArray = new float[size];
-    copyToArray(0, outArray, 0, size);
-    return outArray;
+    return theArray.clone();
   }
 
   /**
@@ -143,17 +133,16 @@ public final class FloatArray extends TO
    */
 
   public int size() {
-    return jcasType.casImpl.ll_getArraySize(addr);
+    return theArray.length;
   }
 
   /**
    * @see org.apache.uima.cas.FloatArrayFS#copyToArray(int, String[], int, int)
    */
   public void copyToArray(int srcOffset, String[] dest, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, srcOffset, length);
+    _casView.checkArrayBounds(theArray.length, srcOffset, length);
     for (int i = 0; i < length; i++) {
-      dest[i + destOffset] = Float.toString(jcasType.ll_cas.ll_getFloatArrayValue(addr, i
-              + srcOffset));
+      dest[i + destOffset] = Float.toString(theArray[i + srcOffset]);
     }
   }
 
@@ -161,10 +150,9 @@ public final class FloatArray extends TO
    * @see org.apache.uima.cas.FloatArrayFS#copyFromArray(String[], int, int, int)
    */
   public void copyFromArray(String[] src, int srcOffset, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, destOffset, length);
+    _casView.checkArrayBounds(theArray.length, destOffset, length);
     for (int i = 0; i < length; i++) {
-      jcasType.ll_cas.ll_setFloatArrayValue(addr, i + destOffset, Float.parseFloat(src[i
-              + srcOffset]));
+      theArray[i + destOffset] = Float.parseFloat(src[i + srcOffset]);
     }
   }
 
@@ -177,4 +165,19 @@ public final class FloatArray extends TO
     copyToArray(0, strArray, 0, size);
     return strArray;
   }
+  
+  // internal use only
+  public float[] _getTheArray() {
+    return theArray;
+  }
+  
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonArray#copyValuesFrom(org.apache.uima.jcas.cas.CommonArray)
+   */
+  @Override
+  public void copyValuesFrom(CommonArray v) {
+    FloatArray bv = (FloatArray) v;
+    System.arraycopy(bv.theArray,  0,  theArray, 0, theArray.length);
+  }
+
 }

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatList.java?rev=1711942&r1=1711941&r2=1711942&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatList.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FloatList.java Mon Nov  2 12:19:46 2015
@@ -19,57 +19,74 @@
 
 package org.apache.uima.jcas.cas;
 
-import org.apache.uima.cas.CASRuntimeException;
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.TypeImpl;
 import org.apache.uima.jcas.JCas;
-import org.apache.uima.jcas.JCasRegistry;
 
-public class FloatList extends org.apache.uima.jcas.cas.TOP {
-
-	public final static int typeIndexID = JCasRegistry.register(FloatList.class);
-
-	public final static int type = typeIndexID;
-
-	public int getTypeIndexID() {
-		return typeIndexID;
-	}
+public abstract class FloatList extends CommonList {
 
 	// Never called.
 	protected FloatList() {// Disable default constructor
 	}
 
-	/* Internal - Constructor used by generator */
-	public FloatList(int addr, TOP_Type type) {
-		super(addr, type);
-	}
-
 	public FloatList(JCas jcas) {
 		super(jcas);
 	}
 
-	public float getNthElement(int i) {
-		if (this instanceof EmptyFloatList) {
-			CASRuntimeException casEx = new CASRuntimeException(
-					CASRuntimeException.JCAS_GET_NTH_ON_EMPTY_LIST, new String[] { "EmptyFloatList" });
-			throw casEx;
-		}
-		if (i < 0) {
-			CASRuntimeException casEx = new CASRuntimeException(
-					CASRuntimeException.JCAS_GET_NTH_NEGATIVE_INDEX, new String[] {Integer.toString(i)});
-			throw casEx;
-		}
-		int originali = i;
-
-		FloatList cg = this;
-		for (;; i--) {
-			if (cg instanceof EmptyFloatList) {
-				CASRuntimeException casEx = new CASRuntimeException(
-						CASRuntimeException.JCAS_GET_NTH_PAST_END, new String[] {Integer.toString(originali)});
-				throw casEx;
-			}
-			NonEmptyFloatList c = (NonEmptyFloatList) cg;
-			if (i == 0)
-				return c.getHead();
-			cg = c.getTail();
-		}
-	}
+  /**
+  * used by generator
+  * Make a new AnnotationBase
+  * @param c -
+  * @param t -
+  */
+
+   public FloatList(TypeImpl t, CASImpl c) {
+     super(t, c);
+   }
+   
+  public float getNthElement(int i) {
+    return ((NonEmptyFloatList) getNonEmptyNthNode(i)).getHead();
+  }
+  
+  public NonEmptyFloatList createNonEmptyNode(CommonList tail) {
+    NonEmptyFloatList node = new NonEmptyFloatList(this._typeImpl, this._casView);
+    node.setTail((FloatList) tail);
+    return node;
+  }
+  
+  public NonEmptyFloatList createNonEmptyNode() { return createNonEmptyNode(null); }
+
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonList#getEmptyNode()
+   */
+  @Override
+  public EmptyFloatList getEmptyNode() {
+    return EmptyFloatList.singleton;
+  }
+
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonList#get_headAsString()
+   */
+  @Override
+  public String get_headAsString() {
+    return Float.toString(((NonEmptyFloatList)this).getHead());
+  }
+
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonList#getTail()
+   */
+  @Override
+  public CommonList getTail() {
+    return ((NonEmptyFloatList)this).getTail();
+  }
+
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonList#setTail(org.apache.uima.jcas.cas.CommonList)
+   */
+  @Override
+  public void setTail(CommonList v) {
+    ((NonEmptyFloatList)this).setTail(v);  // value cast is for checking
+    
+  }
+  
 }

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArray.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArray.java?rev=1711942&r1=1711941&r2=1711942&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArray.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerArray.java Mon Nov  2 12:19:46 2015
@@ -20,11 +20,13 @@
 package org.apache.uima.jcas.cas;
 
 import org.apache.uima.cas.IntArrayFS;
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.TypeImpl;
 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 CommonPrimitiveArray, IntArrayFS {
   /**
    * 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
@@ -42,13 +44,12 @@ public final class IntegerArray extends
   public int getTypeIndexID() {
     return typeIndexID;
   }
+  
+  private final int[] theArray;
 
+  @SuppressWarnings("unused")
   private IntegerArray() { // never called. Here to disable default constructor
-  }
-
- /* Internal - Constructor used by generator */
-  public IntegerArray(int addr, TOP_Type type) {
-    super(addr, type);
+    theArray = null;
   }
 
   /**
@@ -57,86 +58,71 @@ public final class IntegerArray extends
    * @param length The number of elements in the new array
    */  
   public IntegerArray(JCas jcas, int length) {
-    this(
-    /* addr */jcas.getLowLevelCas().ll_createArray(jcas.getType(typeIndexID).casTypeCode, length),
-    /* type */jcas.getType(typeIndexID));
-    // at this point we can use the jcasType value, as it is set
-    // can't do this earlier as the very first statement is required by
-    // JAVA to be the super or alternate constructor call
-    jcasType.casImpl.checkArrayPreconditions(length);
-  }
-
-  // /**
-  // * create a new IntegerArray of a given size.
-  // *
-  // * @param jcas
-  // * @param length
-  // */
-  //
-  // public IntegerArray create(JCas jcas, int length) {
-  // return new IntegerArray(jcas, length);
-  // }
+    super(jcas);
+    theArray = new int[length];
+  }
+
+  /**
+   * used by generator
+   * Make a new IntegerArray of given size
+   * @param c -
+   * @param t -
+   * @param length the length of the array in bytes
+   */
+  public IntegerArray(TypeImpl t, CASImpl c, int length) {
+    super(t, c);  
+    theArray = new int[length];
+  }
 
   /**
    * return the indexed value from the corresponding Cas IntegerArray_JCasImpl as an int.
    */
   public int get(int i) {
-    jcasType.casImpl.checkArrayBounds(addr, i);
-    return jcasType.ll_cas.ll_getIntArrayValue(addr, i);
+    return theArray[i];
   }
 
   /**
    * update the Cas, setting the indexed value to the passed in Java int value.
    */
   public void set(int i, int v) {
-    jcasType.casImpl.checkArrayBounds(addr, i);
-    jcasType.ll_cas.ll_setIntArrayValue(addr, i, v);
+    theArray[i] = v;
+    _casView.maybeLogArrayUpdate(this, null, i);
   }
 
   /**
    * @see org.apache.uima.cas.IntArrayFS#copyFromArray(int[], int, int, int)
    * 
    */
-  public void copyFromArray(int[] src, int srcOffset, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, destOffset, length);
-    for (int i = 0; i < length; i++) {
-      jcasType.ll_cas.ll_setIntArrayValue(addr, i + destOffset, src[i + srcOffset]);
-    }
+  public void copyFromArray(int[] src, int srcPos, int destPos, int length) {
+    System.arraycopy(src, srcPos, theArray, destPos, length);
   }
 
   /**
    * @see org.apache.uima.cas.IntArrayFS#copyToArray(int, int[], int, int)
    */
-  public void copyToArray(int srcOffset, int[] dest, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, srcOffset, length);
-    for (int i = 0; i < length; i++) {
-      dest[i + destOffset] = jcasType.ll_cas.ll_getIntArrayValue(addr, i + srcOffset);
-    }
+  public void copyToArray(int srcPos, int[] dest, int destPos, int length) {
+    System.arraycopy(theArray, srcPos, dest, destPos, length);
   }
 
   /**
    * @see org.apache.uima.cas.IntArrayFS#toArray()
    */
   public int[] toArray() {
-    final int size = size();
-    int[] outArray = new int[size];
-    copyToArray(0, outArray, 0, size);
-    return outArray;
+    return theArray.clone();
   }
 
   /** return the size of the array */
   public int size() {
-    return jcasType.casImpl.ll_getArraySize(addr);
+    return theArray.length;
   }
 
   /**
    * @see org.apache.uima.cas.IntArrayFS#copyToArray(int, String[], int, int)
    */
   public void copyToArray(int srcOffset, String[] dest, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, srcOffset, length);
+    _casView.checkArrayBounds(theArray.length, srcOffset, length);
     for (int i = 0; i < length; i++) {
-      dest[i + destOffset] = Integer.toString(jcasType.ll_cas.ll_getIntArrayValue(addr, i
-              + srcOffset));
+      dest[i + destOffset] = Integer.toString(theArray[i + srcOffset]);
     }
   }
 
@@ -144,10 +130,9 @@ public final class IntegerArray extends
    * @see org.apache.uima.cas.IntArrayFS#copyFromArray(String[], int, int, int)
    */
   public void copyFromArray(String[] src, int srcOffset, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, destOffset, length);
+    _casView.checkArrayBounds(theArray.length, srcOffset, length);
     for (int i = 0; i < length; i++) {
-      jcasType.ll_cas.ll_setIntArrayValue(addr, i + destOffset, Integer
-              .parseInt(src[i + srcOffset]));
+      theArray[i + destOffset] = Integer.parseInt(src[i + srcOffset]);
     }
   }
 
@@ -160,4 +145,19 @@ public final class IntegerArray extends
     copyToArray(0, strArray, 0, size);
     return strArray;
   }
+  
+  // internal use only
+  public int[] _getTheArray() {
+    return theArray;
+  }
+  
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonArray#copyValuesFrom(org.apache.uima.jcas.cas.CommonArray)
+   */
+  @Override
+  public void copyValuesFrom(CommonArray v) {
+    IntegerArray bv = (IntegerArray) v;
+    System.arraycopy(bv.theArray,  0,  theArray, 0, theArray.length);
+  }
+
 }

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerList.java?rev=1711942&r1=1711941&r2=1711942&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerList.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/IntegerList.java Mon Nov  2 12:19:46 2015
@@ -19,56 +19,74 @@
 
 package org.apache.uima.jcas.cas;
 
-import org.apache.uima.cas.CASRuntimeException;
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.TypeImpl;
 import org.apache.uima.jcas.JCas;
-import org.apache.uima.jcas.JCasRegistry;
 
-public class IntegerList extends org.apache.uima.jcas.cas.TOP {
-
-	public final static int typeIndexID = JCasRegistry.register(IntegerList.class);
-
-	public final static int type = typeIndexID;
-
-	public int getTypeIndexID() {
-		return typeIndexID;
-	}
+public abstract class IntegerList extends CommonList {
 
 	// Never called.
 	protected IntegerList() { // Disable default constructor
 	}
 
-	/* Internal - Constructor used by generator */
-	public IntegerList(int addr, TOP_Type type) {
-		super(addr, type);
-	}
-
 	public IntegerList(JCas jcas) {
 		super(jcas);
 	}
 
+	 /**
+   * used by generator
+   * Make a new AnnotationBase
+   * @param c -
+   * @param t -
+   */
+
+  public IntegerList(TypeImpl t, CASImpl c) {
+    super(t, c);
+  }
+
 	public int getNthElement(int i) {
-		if (this instanceof EmptyIntegerList) {
-			CASRuntimeException casEx = new CASRuntimeException(
-					CASRuntimeException.JCAS_GET_NTH_ON_EMPTY_LIST, new String[] { "EmptyIntegerList" });
-			throw casEx;
-		}
-		if (i < 0) {
-			CASRuntimeException casEx = new CASRuntimeException(
-					CASRuntimeException.JCAS_GET_NTH_NEGATIVE_INDEX, new String[] { Integer.toString(i) });
-			throw casEx;
-		}
-		int originali = i;
-		IntegerList cg = this;
-		for (;; i--) {
-			if (cg instanceof EmptyIntegerList) {
-				CASRuntimeException casEx = new CASRuntimeException(
-						CASRuntimeException.JCAS_GET_NTH_PAST_END, new String[] { Integer.toString(originali) });
-				throw casEx;
-			}
-			NonEmptyIntegerList c = (NonEmptyIntegerList) cg;
-			if (i == 0)
-				return c.getHead();
-			cg = c.getTail();
-		}
+		return ((NonEmptyIntegerList) getNonEmptyNthNode(i)).getHead();
 	}
+	
+  public NonEmptyIntegerList createNonEmptyNode(CommonList tail) {
+    NonEmptyIntegerList node = new NonEmptyIntegerList(this._typeImpl, this._casView);
+    node.setTail((IntegerList) tail);
+    return node;
+  }
+  
+  public NonEmptyIntegerList createNonEmptyNode() { return createNonEmptyNode(null); }
+
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonList#getEmptyNode()
+   */
+  @Override
+  public EmptyIntegerList getEmptyNode() {
+    return EmptyIntegerList.singleton;
+  }
+  
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonList#get_headAsString()
+   */
+  @Override
+  public String get_headAsString() {
+    return Integer.toString(((NonEmptyIntegerList)this).getHead());
+  }
+
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonList#getTail()
+   */
+  @Override
+  public CommonList getTail() {
+    return ((NonEmptyIntegerList)this).getTail();
+  }
+
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonList#setTail(org.apache.uima.jcas.cas.CommonList)
+   */
+  @Override
+  public void setTail(CommonList v) {
+    ((NonEmptyIntegerList)this).setTail(v);
+  }
+  
+  
 }

Added: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/JavaObjectArray.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/JavaObjectArray.java?rev=1711942&view=auto
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/JavaObjectArray.java (added)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/JavaObjectArray.java Mon Nov  2 12:19:46 2015
@@ -0,0 +1,169 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.jcas.cas;
+
+import org.apache.uima.cas.FeatureStructure;
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.FeatureStructureImplC;
+import org.apache.uima.cas.impl.TypeImpl;
+import org.apache.uima.jcas.JCas;
+import org.apache.uima.jcas.JCasRegistry;
+
+/** Java Class model for Cas FSArray type */
+public final class JavaObjectArray extends TOP implements CommonPrimitiveArray {
+
+  /**
+   * 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
+   */
+  public final static int typeIndexID = JCasRegistry.register(JavaObjectArray.class);
+
+  public final static int type = typeIndexID;
+
+  /**
+   * used to obtain reference to the _Type instance
+   * 
+   * @return the type array index
+   */
+  // can't be factored - refs locally defined field
+  public int getTypeIndexID() {
+    return typeIndexID;
+  }
+
+  private final Object[] theArray;
+  
+  // never called. Here to disable default constructor
+  @SuppressWarnings("unused")
+  private JavaObjectArray() {
+    theArray = null;
+  }
+
+  /**
+   * Make a new FSArray of given size
+   * @param jcas The JCas
+   * @param length The number of elements in the new array
+   */
+  public JavaObjectArray(JCas jcas, int length) {
+    super(jcas);
+    theArray = new Object[length];
+  }
+  
+  /**
+   * used by generator
+   * Make a new FSArray of given size
+   * @param c -
+   * @param t -
+   * @param length the length of the array
+   */
+  public JavaObjectArray(TypeImpl t, CASImpl c, int length) {
+    super(t, c);  
+    theArray = new Object[length];
+  }
+
+
+  /** return the indexed value from the corresponding Cas FSArray as a Java Model object. */
+  public Object get(int i) {
+    return theArray[i];
+  }
+
+  /** updates the Cas, setting the indexed value with the corresponding Cas FeatureStructure. */
+  public void set(int i, FeatureStructure v) {
+    theArray[i] = (FeatureStructureImplC) v;
+  }
+
+  /** return the size of the array. */
+  public int size() {
+    return theArray.length;
+  }
+
+  /**
+   * @see org.apache.uima.cas.ArrayFS#copyFromArray(FeatureStructure[], int, int, int)
+   */
+  public void copyFromArray(FeatureStructure[] src, int srcPos, int destPos, int length) {
+    System.arraycopy(src, srcPos, theArray, destPos, length);
+  }
+
+  /**
+   * @see org.apache.uima.cas.ArrayFS#copyToArray(int, FeatureStructure[], int, int)
+   */
+  public void copyToArray(int srcPos, FeatureStructure[] dest, int destPos, int length) {
+    System.arraycopy(theArray, srcPos, dest, destPos, length);
+  }
+
+  /**
+   * @see org.apache.uima.cas.ArrayFS#toArray()
+   */
+  public Object[] toArray() {
+    return theArray.clone();
+  }
+
+  /**
+   * Not supported, will throw UnsupportedOperationException
+   */
+  public void copyFromArray(String[] src, int srcPos, int destPos, int length) {
+    throw new UnsupportedOperationException();
+  }
+    
+  /**
+   * Copies an array of Feature Structures to an Array of Strings.
+   * The strings are the "toString()" representation of the feature structures, 
+   * 
+   * @param srcPos
+   *                The index of the first element to copy.
+   * @param dest
+   *                The array to copy to.
+   * @param destPos
+   *                Where to start copying into <code>dest</code>.
+   * @param length
+   *                The number of elements to copy.
+   * @exception ArrayIndexOutOfBoundsException
+   *                    If <code>srcPos &lt; 0</code> or
+   *                    <code>length &gt; size()</code> or
+   *                    <code>destPos + length &gt; destArray.length</code>.
+   */
+  public void copyToArray(int srcPos, String[] dest, int destPos, int length) {
+    _casView.checkArrayBounds(theArray.length, srcPos, length);
+    for (int i = 0; i < length; i++) {
+      dest[i + destPos] = theArray[i + srcPos].toString();
+    }
+  }
+
+  public String[] toStringArray() {
+    final int size = size();
+    String[] strArray = new String[size];
+    copyToArray(0, strArray, 0, size);
+    return strArray;
+  }
+
+  // internal use
+  public Object[] _getTheArray() {
+    return theArray;
+  }
+  
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonArray#copyValuesFrom(org.apache.uima.jcas.cas.CommonArray)
+   */
+  @Override
+  public void copyValuesFrom(CommonArray v) {
+    JavaObjectArray bv = (JavaObjectArray) v;
+    System.arraycopy(bv.theArray,  0,  theArray, 0, theArray.length);
+  }
+
+}

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/LongArray.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/LongArray.java?rev=1711942&r1=1711941&r2=1711942&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/LongArray.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/LongArray.java Mon Nov  2 12:19:46 2015
@@ -20,11 +20,13 @@
 package org.apache.uima.jcas.cas;
 
 import org.apache.uima.cas.LongArrayFS;
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.TypeImpl;
 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 CommonPrimitiveArray, LongArrayFS {
   /**
    * 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
@@ -43,13 +45,11 @@ public final class LongArray extends TOP
     return typeIndexID;
   }
 
+  private final long[] theArray;
   // never called. Here to disable default constructor
+  @SuppressWarnings("unused")
   private LongArray() {
-  }
-
- /* Internal - Constructor used by generator */
-  public LongArray(int addr, TOP_Type type) {
-    super(addr, type);
+    theArray = null;
   }
 
   /**
@@ -58,79 +58,80 @@ public final class LongArray extends TOP
    * @param length The number of elements in the new array
    */
   public LongArray(JCas jcas, int length) {
-    this(jcas.getLowLevelCas().ll_createLongArray(length), jcas.getType(typeIndexID));
+    super(jcas);
+    theArray = new long[length];
   }
 
   /**
+   * used by generator
+   * Make a new LongArray of given size
+   * @param c -
+   * @param t -
+   * @param length the length of the array in bytes
+   */
+  public LongArray(TypeImpl t, CASImpl c, int length) {
+    super(t, c);  
+    theArray = new long[length];
+  }
+  
+  /**
    * @see org.apache.uima.cas.LongArrayFS#get(int)
    */
   public long get(int i) {
-    jcasType.casImpl.checkArrayBounds(addr, i);
-    return jcasType.ll_cas.ll_getLongArrayValue(addr, i);
+    return theArray[i];
   }
 
   /**
    * @see org.apache.uima.cas.LongArrayFS#set(int , long)
    */
   public void set(int i, long v) {
-    jcasType.casImpl.checkArrayBounds(addr, i);
-    jcasType.ll_cas.ll_setLongArrayValue(addr, i, v);
+    theArray[i] = v;
+    _casView.maybeLogArrayUpdate(this, null, i);
   }
 
   /**
    * @see org.apache.uima.cas.LongArrayFS#copyFromArray(long[], int, int, int)
    */
-  public void copyFromArray(long[] src, int srcOffset, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, destOffset, length);
-    for (int i = 0; i < length; i++) {
-      jcasType.ll_cas.ll_setLongArrayValue(addr, i + destOffset, src[i + srcOffset]);
-    }
+  public void copyFromArray(long[] src, int srcPos, int destPos, int length) {
+    System.arraycopy(src, srcPos, theArray, destPos, length);
   }
 
   /**
    * @see org.apache.uima.cas.LongArrayFS#copyToArray(int, long[], int, int)
    */
-  public void copyToArray(int srcOffset, long[] dest, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, srcOffset, length);
-    for (int i = 0; i < length; i++) {
-      dest[i + destOffset] = jcasType.ll_cas.ll_getLongArrayValue(addr, i + srcOffset);
-    }
+  public void copyToArray(int srcPos, long[] dest, int destPos, int length) {
+    System.arraycopy(theArray, srcPos, dest, destPos, length);
   }
 
   /**
    * @see org.apache.uima.cas.LongArrayFS#toArray()
    */
   public long[] toArray() {
-    final int size = size();
-    long[] outArray = new long[size];
-    copyToArray(0, outArray, 0, size);
-    return outArray;
+    return theArray.clone();
   }
 
   /** return the size of the array */
   public int size() {
-    return jcasType.casImpl.ll_getArraySize(addr);
+    return theArray.length;
   }
 
   /**
    * @see org.apache.uima.cas.LongArrayFS#copyToArray(int, String[], int, int)
    */
-  public void copyToArray(int srcOffset, String[] dest, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, srcOffset, length);
+  public void copyToArray(int srcPos, String[] dest, int destPos, int length) {
+    _casView.checkArrayBounds(theArray.length, srcPos, length);
     for (int i = 0; i < length; i++) {
-      dest[i + destOffset] = Long.toString(jcasType.ll_cas
-              .ll_getLongArrayValue(addr, i + srcOffset));
+      dest[i + destPos] = Long.toString(theArray[i + srcPos]);
     }
   }
 
   /**
    * @see org.apache.uima.cas.LongArrayFS#copyFromArray(String[], int, int, int)
    */
-  public void copyFromArray(String[] src, int srcOffset, int destOffset, int length) {
-    jcasType.casImpl.checkArrayBounds(addr, destOffset, length);
+  public void copyFromArray(String[] src, int srcPos, int destPos, int length) {
+    _casView.checkArrayBounds(theArray.length, destPos, length);
     for (int i = 0; i < length; i++) {
-      jcasType.ll_cas
-              .ll_setLongArrayValue(addr, i + destOffset, Long.parseLong(src[i + srcOffset]));
+      theArray[i + destPos] = Long.parseLong(src[i + srcPos]);
     }
   }
 
@@ -140,4 +141,19 @@ public final class LongArray extends TOP
     copyToArray(0, strArray, 0, size);
     return strArray;
   }
+  
+  // internal use
+  public long[] _getTheArray() {
+    return theArray;
+  }
+  
+  /* (non-Javadoc)
+   * @see org.apache.uima.jcas.cas.CommonArray#copyValuesFrom(org.apache.uima.jcas.cas.CommonArray)
+   */
+  @Override
+  public void copyValuesFrom(CommonArray v) {
+    LongArray bv = (LongArray) v;
+    System.arraycopy(bv.theArray,  0,  theArray, 0, theArray.length);
+  }
+
 }

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java?rev=1711942&r1=1711941&r2=1711942&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java Mon Nov  2 12:19:46 2015
@@ -19,10 +19,14 @@
 
 package org.apache.uima.jcas.cas;
 
+import org.apache.uima.cas.CAS;
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.TypeImpl;
+import org.apache.uima.cas.impl.TypeSystemImpl;
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
-public class NonEmptyFSList extends FSList {
+public class NonEmptyFSList extends FSList implements NonEmptyList {
 
   public final static int typeIndexID = JCasRegistry.register(NonEmptyFSList.class);
 
@@ -32,52 +36,69 @@ public class NonEmptyFSList extends FSLi
     return typeIndexID;
   }
 
+  // Offsets to use in accessing features
+  //   For built-ins, these are static constants
+  
+  private final static int head_featCode;
+  private final static int tail_featCode;
+  
+  static {
+    TypeSystemImpl tsi = TypeSystemImpl.staticTsi;
+    TypeImpl listType = tsi.getType(CAS.TYPE_NAME_NON_EMPTY_FS_LIST);
+    
+    // makes assumption that all uima lists have the same head/tail offsets
+    head_featCode = listType.getFeatureByBaseName(CAS.FEATURE_BASE_NAME_HEAD).getCode();
+    tail_featCode = listType.getFeatureByBaseName(CAS.FEATURE_BASE_NAME_TAIL).getCode();
+  }
+
+  /* local data */
+  private TOP _F_head;
+  private FSList _F_tail;
+  
   // Never called. Disable default constructor
   protected NonEmptyFSList() {
   }
 
- /* Internal - Constructor used by generator */
-  public NonEmptyFSList(int addr, TOP_Type type) {
-    super(addr, type);
-  }
-
   public NonEmptyFSList(JCas jcas) {
     super(jcas);
   }
 
+  /**
+   * used by generator
+   * Make a new AnnotationBase
+   * @param c -
+   * @param t -
+   */
+
+  public NonEmptyFSList(TypeImpl t, CASImpl c) {
+    super(t, c);
+  }
+
   // *------------------*
   // * Feature: head
   /* getter for head * */
-  public org.apache.uima.jcas.cas.TOP getHead() {
-    if (NonEmptyFSList_Type.featOkTst && ((NonEmptyFSList_Type) jcasType).casFeat_head == null)
-      this.jcasType.jcas.throwFeatMissing("head", "uima.cas.NonEmptyFSList");
-    return (org.apache.uima.jcas.cas.TOP) (jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas
-            .ll_getRefValue(addr, ((NonEmptyFSList_Type) jcasType).casFeatCode_head)));
-  }
+  public TOP getHead() { return _F_head; }
 
   /* setter for head * */
-  public void setHead(org.apache.uima.jcas.cas.TOP v) {
-    if (NonEmptyFSList_Type.featOkTst && ((NonEmptyFSList_Type) jcasType).casFeat_head == null)
-      this.jcasType.jcas.throwFeatMissing("head", "uima.cas.NonEmptyFSList");
-    jcasType.ll_cas.ll_setRefValue(addr, ((NonEmptyFSList_Type) jcasType).casFeatCode_head,
-            jcasType.ll_cas.ll_getFSRef(v));
+  public void setHead(TOP v) {
+    _F_head = v;  
+    // no corruption check - can't be a key
+    _casView.maybeLogUpdate(this, head_featCode);
   }
 
   // *------------------*
   // * Feature: tail
   /* getter for tail * */
-  public FSList getTail() {
-    if (NonEmptyFSList_Type.featOkTst && ((NonEmptyFSList_Type) jcasType).casFeat_tail == null)
-      this.jcasType.jcas.throwFeatMissing("tail", "uima.cas.NonEmptyFSList");
-    return (FSList) (jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr,
-            ((NonEmptyFSList_Type) jcasType).casFeatCode_tail)));
-  }
+  public FSList getTail() { return _F_tail; }
 
   /* setter for tail * */
-  public void setTail(FSList v) {
-    if (NonEmptyFSList_Type.featOkTst && ((NonEmptyFSList_Type) jcasType).casFeat_tail == null)
-      this.jcasType.jcas.throwFeatMissing("tail", "uima.cas.NonEmptyFSList");
-    jcasType.ll_cas.ll_setRefValue(addr, ((NonEmptyFSList_Type) jcasType).casFeatCode_tail,
-            jcasType.ll_cas.ll_getFSRef(v));
+  public void setTail(CommonList v) {
+    _F_tail = (FSList) v;
+    // no corruption check - can't be a key
+    _casView.maybeLogUpdate(this, tail_featCode);
+  }
+  
+  public TOP getNthElement(int i) {
+    return ((NonEmptyFSList)getNonEmptyNthNode(i)).getHead();
   }
 }

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFloatList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFloatList.java?rev=1711942&r1=1711941&r2=1711942&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFloatList.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFloatList.java Mon Nov  2 12:19:46 2015
@@ -19,10 +19,14 @@
 
 package org.apache.uima.jcas.cas;
 
+import org.apache.uima.cas.CAS;
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.TypeImpl;
+import org.apache.uima.cas.impl.TypeSystemImpl;
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
-public class NonEmptyFloatList extends FloatList {
+public class NonEmptyFloatList extends FloatList implements NonEmptyList {
 
   public final static int typeIndexID = JCasRegistry.register(NonEmptyFloatList.class);
 
@@ -32,55 +36,67 @@ public class NonEmptyFloatList extends F
     return typeIndexID;
   }
 
+  // Offsets to use in accessing features
+  //   For built-ins, these are static constants
+  
+  private final static int head_featCode;
+  private final static int tail_featCode;
+  
+  static {
+    TypeSystemImpl tsi = TypeSystemImpl.staticTsi;
+    TypeImpl listType = tsi.getType(CAS.TYPE_NAME_NON_EMPTY_FLOAT_LIST);
+    
+    // makes assumption that all uima lists have the same head/tail offsets
+    head_featCode = listType.getFeatureByBaseName(CAS.FEATURE_BASE_NAME_HEAD).getCode();
+    tail_featCode = listType.getFeatureByBaseName(CAS.FEATURE_BASE_NAME_TAIL).getCode();
+  }
+
+  /* local data */
+  private float _F_head;
+  private FloatList _F_tail;
+  
   // Never called. Disable default constructor
   protected NonEmptyFloatList() {
   }
 
- /* Internal - Constructor used by generator */
-  public NonEmptyFloatList(int addr, TOP_Type type) {
-    super(addr, type);
-  }
-
   public NonEmptyFloatList(JCas jcas) {
     super(jcas);
   }
 
+  /**
+   * used by generator
+   * Make a new AnnotationBase
+   * @param c -
+   * @param t -
+   */
+
+  public NonEmptyFloatList(TypeImpl t, CASImpl c) {
+    super(t, c);
+  }
+
   // *------------------*
   // * Feature: head
   /* getter for head * */
-  public float getHead() {
-    if (NonEmptyFloatList_Type.featOkTst
-            && ((NonEmptyFloatList_Type) jcasType).casFeat_head == null)
-      this.jcasType.jcas.throwFeatMissing("head", "uima.cas.NonEmptyFloatList");
-    return jcasType.ll_cas.ll_getFloatValue(addr,
-            ((NonEmptyFloatList_Type) jcasType).casFeatCode_head);
-  }
+  public float getHead() { return _F_head; }
 
   /* setter for head * */
   public void setHead(float v) {
-    if (NonEmptyFloatList_Type.featOkTst
-            && ((NonEmptyFloatList_Type) jcasType).casFeat_head == null)
-      this.jcasType.jcas.throwFeatMissing("head", "uima.cas.NonEmptyFloatList");
-    jcasType.ll_cas.ll_setFloatValue(addr, ((NonEmptyFloatList_Type) jcasType).casFeatCode_head, v);
+    _F_head = v;  
+    // no corruption check - a list element can't be a key
+    _casView.maybeLogUpdate(this, head_featCode);
   }
 
   // *------------------*
   // * Feature: tail
   /* getter for tail * */
-  public FloatList getTail() {
-    if (NonEmptyFloatList_Type.featOkTst
-            && ((NonEmptyFloatList_Type) jcasType).casFeat_tail == null)
-      this.jcasType.jcas.throwFeatMissing("tail", "uima.cas.NonEmptyFloatList");
-    return (FloatList) (jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr,
-            ((NonEmptyFloatList_Type) jcasType).casFeatCode_tail)));
-  }
+  public FloatList getTail() { return _F_tail; }
 
   /* setter for tail * */
-  public void setTail(FloatList v) {
-    if (NonEmptyFloatList_Type.featOkTst
-            && ((NonEmptyFloatList_Type) jcasType).casFeat_tail == null)
-      this.jcasType.jcas.throwFeatMissing("tail", "uima.cas.NonEmptyFloatList");
-    jcasType.ll_cas.ll_setRefValue(addr, ((NonEmptyFloatList_Type) jcasType).casFeatCode_tail,
-            jcasType.ll_cas.ll_getFSRef(v));
+  @Override
+  public void setTail(CommonList v) {
+    _F_tail = (FloatList) v;
+    // no corruption check - can't be a key
+    _casView.maybeLogUpdate(this, tail_featCode);
   }
+  
 }

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyIntegerList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyIntegerList.java?rev=1711942&r1=1711941&r2=1711942&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyIntegerList.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyIntegerList.java Mon Nov  2 12:19:46 2015
@@ -19,10 +19,16 @@
 
 package org.apache.uima.jcas.cas;
 
+import java.util.List;
+
+import org.apache.uima.cas.CAS;
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.TypeImpl;
+import org.apache.uima.cas.impl.TypeSystemImpl;
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 
-public class NonEmptyIntegerList extends IntegerList {
+public class NonEmptyIntegerList extends IntegerList implements NonEmptyList {
 
   public final static int typeIndexID = JCasRegistry.register(NonEmptyIntegerList.class);
 
@@ -31,56 +37,73 @@ public class NonEmptyIntegerList extends
   public int getTypeIndexID() {
     return typeIndexID;
   }
-
+  
+  // Offsets to use in accessing features
+  //   For built-ins, these are static constants
+  
+  private final static int head_featCode;
+  private final static int tail_featCode;
+  
+  static {
+    TypeSystemImpl tsi = TypeSystemImpl.staticTsi;
+    TypeImpl listType = tsi.getType(CAS.TYPE_NAME_NON_EMPTY_INTEGER_LIST);
+    
+    // makes assumption that all uima lists have the same head/tail offsets
+    head_featCode = listType.getFeatureByBaseName(CAS.FEATURE_BASE_NAME_HEAD).getCode();
+    tail_featCode = listType.getFeatureByBaseName(CAS.FEATURE_BASE_NAME_TAIL).getCode();
+  }
+
+  /* local data */
+  private int _F_head;
+  private IntegerList _F_tail;
+  
   // Never called. Disable default constructor
   protected NonEmptyIntegerList() {
   }
 
- /* Internal - Constructor used by generator */
-  public NonEmptyIntegerList(int addr, TOP_Type type) {
-    super(addr, type);
-  }
-
   public NonEmptyIntegerList(JCas jcas) {
     super(jcas);
   }
+  
+  /**
+   * used by generator
+   * Make a new AnnotationBase
+   * @param c -
+   * @param t -
+   */
+
+  public NonEmptyIntegerList(TypeImpl t, CASImpl c) {
+    super(t, c);
+  }
+
 
   // *------------------*
   // * Feature: head
   /* getter for head * */
-  public int getHead() {
-    if (NonEmptyIntegerList_Type.featOkTst
-            && ((NonEmptyIntegerList_Type) jcasType).casFeat_head == null)
-      this.jcasType.jcas.throwFeatMissing("head", "uima.cas.NonEmptyIntegerList");
-    return jcasType.ll_cas.ll_getIntValue(addr,
-            ((NonEmptyIntegerList_Type) jcasType).casFeatCode_head);
-  }
+  public int getHead() { return _F_head; }
 
   /* setter for head * */
   public void setHead(int v) {
-    if (NonEmptyIntegerList_Type.featOkTst
-            && ((NonEmptyIntegerList_Type) jcasType).casFeat_head == null)
-      this.jcasType.jcas.throwFeatMissing("head", "uima.cas.NonEmptyIntegerList");
-    jcasType.ll_cas.ll_setIntValue(addr, ((NonEmptyIntegerList_Type) jcasType).casFeatCode_head, v);
+    _F_head = v;  
+    // no corruption check - can't be a key
+    _casView.maybeLogUpdate(this, head_featCode);
   }
-
+  
   // *------------------*
   // * Feature: tail
   /* getter for tail * */
-  public IntegerList getTail() {
-    if (NonEmptyIntegerList_Type.featOkTst
-            && ((NonEmptyIntegerList_Type) jcasType).casFeat_tail == null)
-      this.jcasType.jcas.throwFeatMissing("tail", "uima.cas.NonEmptyIntegerList");
-    return (IntegerList) (jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr,
-            ((NonEmptyIntegerList_Type) jcasType).casFeatCode_tail)));
-  }
+  public IntegerList getTail() { return _F_tail; }
 
   /* setter for tail * */
-  public void setTail(IntegerList v) {
-    if (NonEmptyIntegerList_Type.featOkTst
-            && ((NonEmptyIntegerList_Type) jcasType).casFeat_tail == null)
-      this.jcasType.jcas.throwFeatMissing("tail", "uima.cas.NonEmptyIntegerList");
-    jcasType.ll_cas.ll_setRefValue(addr, ((NonEmptyIntegerList_Type) jcasType).casFeatCode_tail,
-            jcasType.ll_cas.ll_getFSRef(v));
+  public void setTail(CommonList v) {
+    assert(v instanceof IntegerList);
+    _F_tail = (IntegerList) v;
+    // no corruption check - can't be a key
+    _casView.maybeLogUpdate(this, tail_featCode);
+  }
+  
+  public void setHead(List<String> stringValues, int i) {
+    setHead(Integer.parseInt(stringValues.get(i)));
   }
+
 }

Added: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyList.java?rev=1711942&view=auto
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyList.java (added)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyList.java Mon Nov  2 12:19:46 2015
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.jcas.cas;
+
+/**
+ * a marker interface for nonempty lists
+ */
+public interface NonEmptyList {
+  CommonList getTail();
+}