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/08/18 17:25:47 UTC
svn commit: r1756836 - in
/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima:
cas/impl/FeatureStructureImplC.java jcas/cas/FSArray.java
Author: schor
Date: Thu Aug 18 17:25:47 2016
New Revision: 1756836
URL: http://svn.apache.org/viewvc?rev=1756836&view=rev
Log:
[UIMA-5030] FSArray support for Pears
Modified:
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureStructureImplC.java
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSArray.java
Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureStructureImplC.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureStructureImplC.java?rev=1756836&r1=1756835&r2=1756836&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureStructureImplC.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureStructureImplC.java Thu Aug 18 17:25:47 2016
@@ -556,7 +556,7 @@ public class FeatureStructureImplC imple
* @param v the FS to check
* @return the FS or if it was a trampoline, the base FS
*/
- private TOP _maybeGetBaseForPearFs(TOP v) {
+ protected TOP _maybeGetBaseForPearFs(TOP v) {
return (v == null)
? null
: v._isPearTrampoline()
@@ -564,6 +564,17 @@ public class FeatureStructureImplC imple
: v;
}
+ /**
+ * Called when getting a FS value which might need to return a Pear context's trampoline
+ * @param v the FS to check
+ * @return the FS or if we're in a Pear context, perhaps the trampoline (only some classes might have trampolines)
+ */
+ protected TOP _maybeGetPearFs(TOP v) {
+ return (_casView.inPearContext())
+ ? _casView.pearConvert(v)
+ : v;
+ }
+
public void _setFeatureValueNcWj(int adjOffset, FeatureStructure v) {
_setRefValueCommonWj(_getFeatFromAdjOffset(adjOffset, false), _maybeGetBaseForPearFs((TOP)v));
}
@@ -760,10 +771,7 @@ public class FeatureStructureImplC imple
public TOP _getFeatureValueNc(FeatureImpl feat) { return _getFeatureValueNc(feat.getAdjustedOffset()); }
public TOP _getFeatureValueNc(int adjOffset) {
- TOP r = (TOP) _refData[adjOffset /*+ _getRefDataArrayOffset()*/];
- return (_casView.inPearContext())
- ? _casView.pearConvert(r)
- : r;
+ return _maybeGetPearFs((TOP) _refData[adjOffset /*+ _getRefDataArrayOffset()*/]);
}
@Override
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=1756836&r1=1756835&r2=1756836&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 Thu Aug 18 17:25:47 2016
@@ -91,17 +91,17 @@ public final class FSArray extends TOP i
/** return the indexed value from the corresponding Cas FSArray as a Java Model object. */
public TOP get(int i) {
- return theArray[i];
+ return _maybeGetPearFs(theArray[i]);
}
/** updates the Cas, setting the indexed value with the corresponding Cas FeatureStructure. */
public void set(int i, FeatureStructure v) {
TOP vt = (TOP) v;
- if (v != null && _casView.getBaseCAS() != vt._casView.getBaseCAS()) {
+ if (vt != null && _casView.getBaseCAS() != vt._casView.getBaseCAS()) {
/** Feature Structure {0} belongs to CAS {1}, may not be set as the value of an array or list element in a different CAS {2}.*/
throw new CASRuntimeException(CASRuntimeException.FS_NOT_MEMBER_OF_CAS, vt, vt._casView, _casView);
}
- theArray[i] = vt;
+ theArray[i] = _maybeGetBaseForPearFs(vt);
_casView.maybeLogArrayUpdate(this, null, i);
}
@@ -114,21 +114,43 @@ public final class FSArray extends TOP i
* @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);
+ int srcEnd = srcPos + length;
+ int destEnd = destPos + length;
+ if (srcPos < 0 ||
+ srcEnd > src.length ||
+ destEnd > size()) {
+ throw new ArrayIndexOutOfBoundsException(
+ String.format("FSArray.copyFromArray, srcPos: %,d destPos: %,d length: %,d", srcPos, destPos, length));
+ }
+ for (;srcPos < srcEnd && destPos < destEnd;) {
+ set(destPos++, src[srcPos++]);
+ }
}
/**
* @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);
+ int srcEnd = srcPos + length;
+ int destEnd = destPos + length;
+ if (srcPos < 0 ||
+ srcEnd > size() ||
+ destEnd > dest.length) {
+ throw new ArrayIndexOutOfBoundsException(
+ String.format("FSArray.copyToArray, srcPos: %,d destPos: %,d length: %,d", srcPos, destPos, length));
+ }
+ for (;srcPos < srcEnd && destPos < destEnd;) {
+ dest[destPos++] = _maybeGetPearFs(get(srcPos++));
+ }
}
/**
* @see org.apache.uima.cas.ArrayFS#toArray()
*/
public FeatureStructure[] toArray() {
- return theArray.clone();
+ FeatureStructure[] r = new FeatureStructure[size()];
+ copyToArray(0, r, 0, size());
+ return r;
}
/**
@@ -158,7 +180,7 @@ public final class FSArray extends TOP i
public void copyToArray(int srcPos, String[] dest, int destPos, int length) {
_casView.checkArrayBounds(theArray.length, srcPos, length);
for (int i = 0; i < length; i++) {
- FeatureStructure fs = theArray[i + srcPos];
+ FeatureStructure fs = _maybeGetPearFs(theArray[i + srcPos]);
dest[i + destPos] = (fs == null) ? null : fs.toString();
}
}
@@ -171,12 +193,15 @@ public final class FSArray extends TOP i
}
// internal use
+ // used by serializers
+ // no conversion to Pear trampolines done
public TOP[] _getTheArray() {
return theArray;
}
/* (non-Javadoc)
* @see org.apache.uima.jcas.cas.CommonArray#copyValuesFrom(org.apache.uima.jcas.cas.CommonArray)
+ * no conversion to Pear trampolines done
*/
@Override
public void copyValuesFrom(CommonArray v) {