Author: bhavani Date: Mon Jan 30 19:22:00 2012 New Revision: 1237940 URL: http://svn.apache.org/viewvc?rev=1237940&view=rev Log: UIMA-2307 uiEnd represents number of elements.
Modified: uima/uimacpp/trunk/src/cas/arrayfs.cpp uima/uimacpp/trunk/src/cas/uima/arrayfs.hpp uima/uimacpp/trunk/src/test/src/test_primitivetypes.cpp Modified: uima/uimacpp/trunk/src/cas/arrayfs.cpp URL: http://svn.apache.org/viewvc/uima/uimacpp/trunk/src/cas/arrayfs.cpp?rev=1237940&r1=1237939&r2=1237940&view=diff ============================================================================== --- uima/uimacpp/trunk/src/cas/arrayfs.cpp (original) +++ uima/uimacpp/trunk/src/cas/arrayfs.cpp Mon Jan 30 19:22:00 2012 @@ -170,11 +170,11 @@ namespace uima { T* destArray, size_t uiDestOffset) const { checkValidity(UIMA_MSG_ID_EXCON_GETTING_FS_FROM_ARRAY); - checkArraySize(iv_tyFS, iv_cas->getHeap(), uiEnd - uiStart , UIMA_MSG_ID_EXCON_GETTING_FS_FROM_ARRAY); + checkArraySize(iv_tyFS, iv_cas->getHeap(), uiEnd - uiStart - 1 , UIMA_MSG_ID_EXCON_GETTING_FS_FROM_ARRAY); uima::lowlevel::TyFSType typecode = iv_cas->getHeap()->getType(iv_tyFS); - T result; + size_t srcOffset = uiStart; - size_t numelements = uiEnd-uiStart+1; + size_t numelements = uiEnd-uiStart; size_t destOffset = uiDestOffset; if (typecode== uima::internal::gs_tyIntArrayType || @@ -205,10 +205,10 @@ namespace uima { size_t uiEnd, size_t uiOffset) { checkValidity(UIMA_MSG_ID_EXCON_GETTING_FS_FROM_ARRAY); - checkArraySize(iv_tyFS, iv_cas->getHeap(), uiEnd - uiStart, UIMA_MSG_ID_EXCON_GETTING_FS_FROM_ARRAY); + checkArraySize(iv_tyFS, iv_cas->getHeap(), uiEnd - uiStart - 1, UIMA_MSG_ID_EXCON_GETTING_FS_FROM_ARRAY); size_t srcOffset = uiStart; - size_t numelements = uiEnd-uiStart+1; + size_t numelements = uiEnd-uiStart; size_t destOffset = uiOffset; checkArraySize(iv_tyFS, iv_cas->getHeap(), destOffset+numelements-1, UIMA_MSG_ID_EXCON_GETTING_FS_FROM_ARRAY); uima::lowlevel::TyFSType typecode = iv_cas->getHeap()->getType(iv_tyFS); @@ -242,6 +242,19 @@ namespace uima { } template< class T, const uima::lowlevel::TyFSType ARRAY_TYPE > + void BasicArrayFS<T, ARRAY_TYPE>::copyToArray( + size_t srcOffset, T * destArray, size_t destOffset, size_t length) + const { + copyToArray(srcOffset, srcOffset + length, destArray, destOffset ); + } + + // template< class T, const uima::lowlevel::TyFSType ARRAY_TYPE > + //void BasicArrayFS<T, ARRAY_TYPE>::copyFromArray( + // T const * srcArray, size_t srcOffset, size_t destOffset, size_t length) { + //copyFromArray(srcArray, srcOffset, srcOffset + length, destOffset); + //} + + template< class T, const uima::lowlevel::TyFSType ARRAY_TYPE > /*static*/ BasicArrayFS<T, ARRAY_TYPE> BasicArrayFS<T, ARRAY_TYPE>::createArrayFS( CAS & cas, size_t uiSize, bool bIsPermanent) { assertWithMsg( sizeof(FeatureStructure::TyArrayElement) == sizeof(lowlevel::TyHeapCell), "Port required"); uima::lowlevel::FSHeap & heap = *uima::internal::FSPromoter::getFSHeap(cas); Modified: uima/uimacpp/trunk/src/cas/uima/arrayfs.hpp URL: http://svn.apache.org/viewvc/uima/uimacpp/trunk/src/cas/uima/arrayfs.hpp?rev=1237940&r1=1237939&r2=1237940&view=diff ============================================================================== --- uima/uimacpp/trunk/src/cas/uima/arrayfs.hpp (original) +++ uima/uimacpp/trunk/src/cas/uima/arrayfs.hpp Mon Jan 30 19:22:00 2012 @@ -199,6 +199,39 @@ namespace uima { size_t uiEnd, size_t uiOffset); + /** + * Copy the contents of the array from <code>start</code> for <code>numelements</code> to the + * destination <code>destArray</code> with destination offset <code>destOffset</code>. + * + * @param srcOffset The index of the first element to copy. + * @param dest The array to copy to. + * @param destOffset Where to start copying into. + * @param numelements The number of elements to copy. + * @throws InvalidFSObjectException + * @throws FSArrayOutOfBoundsException + * If <code>srcOffset < 0</code> or <code>length > size()</code> or + * <code>destOffset + length > destArray.length</code>. + */ + void copyToArray(size_t srcOffset, T * destArray, size_t destOffset, size_t numelements) const ; + + + /** + * Copy the contents of an external array into this array. + * + * @param src The source array. + * @param srcOffset Where to start copying in the source array. + * @param destOffset Where to start copying to in the destination array. + * @param length The number of elements to copy. + * @throws InvalidFSObjectException + * @throws FSArrayOutOfBoundsException If <code>srcOffset or destOffset < 0</code> + * or <code>length > size()</code> or + * <code>destOffset + length > size()</code>. + * + * NOTE: replace copyFromArray with this API to be consistent with the Java API. + */ + +// void copyFromArray(T const * src, size_t srcOffset, size_t destOffset, size_t length) ; + /// @if internal /** * create a feature structure of type empty list (list length is zero) Modified: uima/uimacpp/trunk/src/test/src/test_primitivetypes.cpp URL: http://svn.apache.org/viewvc/uima/uimacpp/trunk/src/test/src/test_primitivetypes.cpp?rev=1237940&r1=1237939&r2=1237940&view=diff ============================================================================== --- uima/uimacpp/trunk/src/test/src/test_primitivetypes.cpp (original) +++ uima/uimacpp/trunk/src/test/src/test_primitivetypes.cpp Mon Jan 30 19:22:00 2012 @@ -144,7 +144,7 @@ void createExampleFS(CAS & cas, bool cop IntArrayFS intArrayFS = cas.createIntArrayFS(NUMBEROF(ints)); if (copyarrays) { - intArrayFS.copyFromArray(ints,0,NUMBEROF(ints)-1,0); + intArrayFS.copyFromArray(ints,0,NUMBEROF(ints),0); } else { for (size_t i=0; i< NUMBEROF(ints); ++i) { intArrayFS.set(i, ints[i]); @@ -158,7 +158,7 @@ void createExampleFS(CAS & cas, bool cop FloatArrayFS floatArrayFS = cas.createFloatArrayFS(NUMBEROF(floats)); if (copyarrays) { - floatArrayFS.copyFromArray(floats,0,NUMBEROF(floats)-1,0); + floatArrayFS.copyFromArray(floats,0,NUMBEROF(floats),0); } else { for (size_t i=0; i< NUMBEROF(floats); ++i) { floatArrayFS.set(i, floats[i]); @@ -167,7 +167,7 @@ void createExampleFS(CAS & cas, bool cop ByteArrayFS byteArrayFS = cas.createByteArrayFS(NUMBEROF(chars)); if (copyarrays) { - byteArrayFS.copyFromArray(chars,0,NUMBEROF(chars)-1,0); + byteArrayFS.copyFromArray(chars,0,NUMBEROF(chars),0); } else { for (size_t i=0; i< NUMBEROF(chars); ++i) { byteArrayFS.set(i, chars[i]); @@ -181,7 +181,7 @@ void createExampleFS(CAS & cas, bool cop bools[i] = val; } if (copyarrays) { - boolArrayFS.copyFromArray(bools,0,NUMBEROF(bools)-1,0); + boolArrayFS.copyFromArray(bools,0,NUMBEROF(bools),0); } else { for (int i=0; i<BOOLEAN_ARRAY_SIZE; i++) { boolArrayFS.set(i,bools[i]); @@ -190,7 +190,7 @@ void createExampleFS(CAS & cas, bool cop ShortArrayFS shortArrayFS = cas.createShortArrayFS(NUMBEROF(shorts)); if (copyarrays) { - shortArrayFS.copyFromArray(shorts,0,NUMBEROF(shorts)-1,0); + shortArrayFS.copyFromArray(shorts,0,NUMBEROF(shorts),0); } else { for (size_t i=0; i< NUMBEROF(shorts); ++i) { shortArrayFS.set(i, shorts[i]); @@ -199,7 +199,7 @@ void createExampleFS(CAS & cas, bool cop LongArrayFS longArrayFS = cas.createLongArrayFS(NUMBEROF(longs)); if (copyarrays) { - longArrayFS.copyFromArray(longs,0,NUMBEROF(longs)-1,0); + longArrayFS.copyFromArray(longs,0,NUMBEROF(longs),0); } else { for (size_t i=0; i< NUMBEROF(longs); ++i) { longArrayFS.set(i, longs[i]); @@ -208,7 +208,7 @@ void createExampleFS(CAS & cas, bool cop DoubleArrayFS doubleArrayFS = cas.createDoubleArrayFS(NUMBEROF(doubles)); if (copyarrays) { - doubleArrayFS.copyFromArray(doubles,0,NUMBEROF(doubles)-1,0); + doubleArrayFS.copyFromArray(doubles,0,NUMBEROF(doubles),0); } else { for (size_t i=0; i< NUMBEROF(doubles); ++i) { doubleArrayFS.set(i, doubles[i]); @@ -327,7 +327,8 @@ void validateFS(CAS & cas, bool checkcop } if (checkcopytoarray) { //copy only part of int array int * destArray = new int[intArrayFS.size()]; - intArrayFS.copyToArray(2,intArrayFS.size()-1,destArray,0); +// intArrayFS.copyToArray(2,intArrayFS.size(),destArray,0); + intArrayFS.copyToArray(2,destArray,0,intArrayFS.size()-2); for (size_t i=0;i < intArrayFS.size()-2; i++ ) { ASSERT_OR_THROWEXCEPTION( *(destArray+i)==ints[i+2]); } @@ -348,7 +349,8 @@ void validateFS(CAS & cas, bool checkcop } if (checkcopytoarray) { float * destArray = new float[floatArrayFS.size()]; - floatArrayFS.copyToArray(0,floatArrayFS.size()-1,destArray,0); +// floatArrayFS.copyToArray(0,floatArrayFS.size(),destArray,0); + floatArrayFS.copyToArray(0,destArray,0,floatArrayFS.size()); for (size_t i=0;i < floatArrayFS.size(); i++ ) { ASSERT_OR_THROWEXCEPTION( *(destArray+i)==floats[i]); } @@ -362,7 +364,8 @@ void validateFS(CAS & cas, bool checkcop } if (checkcopytoarray) { char * destArray = new char[byteArrayFS.size()]; - byteArrayFS.copyToArray(0,byteArrayFS.size()-1,destArray,0); + //byteArrayFS.copyToArray(0,byteArrayFS.size(),destArray,0); + byteArrayFS.copyToArray(0,destArray,0,byteArrayFS.size()); for (size_t i=0;i < byteArrayFS.size(); i++ ) { ASSERT_OR_THROWEXCEPTION( *(destArray+i)==chars[i]); } @@ -377,7 +380,8 @@ void validateFS(CAS & cas, bool checkcop } if (checkcopytoarray) { bool * destArray = new bool[boolArrayFS.size()]; - boolArrayFS.copyToArray(0,boolArrayFS.size()-1,destArray,0); + //boolArrayFS.copyToArray(0,boolArrayFS.size(),destArray,0); + boolArrayFS.copyToArray(0,destArray,0,boolArrayFS.size()); for (size_t i=0;i < boolArrayFS.size(); i++ ) { val = !val; ASSERT_OR_THROWEXCEPTION( *(destArray+i)==val); @@ -392,7 +396,8 @@ void validateFS(CAS & cas, bool checkcop } if (checkcopytoarray) { short * destArray = new short[shortArrayFS.size()]; - shortArrayFS.copyToArray(0,shortArrayFS.size()-1,destArray,0); + //shortArrayFS.copyToArray(0,shortArrayFS.size(),destArray,0); + shortArrayFS.copyToArray(0,destArray,0,shortArrayFS.size()); for (size_t i=0;i < shortArrayFS.size(); i++ ) { ASSERT_OR_THROWEXCEPTION( *(destArray+i)==shorts[i]); } @@ -406,7 +411,8 @@ void validateFS(CAS & cas, bool checkcop } if (checkcopytoarray) { INT64 * destArray = new INT64[longArrayFS.size()]; - longArrayFS.copyToArray(0,longArrayFS.size()-1,destArray,0); + //longArrayFS.copyToArray(0,longArrayFS.size(),destArray,0); + longArrayFS.copyToArray(0,destArray,0,longArrayFS.size()); for (size_t i=0;i < longArrayFS.size(); i++ ) { ASSERT_OR_THROWEXCEPTION( *(destArray+i)==longs[i]); } @@ -420,7 +426,8 @@ void validateFS(CAS & cas, bool checkcop } if (checkcopytoarray) { double * destArray = new double[doubleArrayFS.size()]; - doubleArrayFS.copyToArray(0,doubleArrayFS.size()-1,destArray,0); + //doubleArrayFS.copyToArray(0,doubleArrayFS.size(),destArray,0); + doubleArrayFS.copyToArray(0,destArray,0,doubleArrayFS.size()); for (size_t i=0;i < doubleArrayFS.size(); i++ ) { ASSERT_OR_THROWEXCEPTION( *(destArray+i)==doubles[i]); }