in src/cas/sofastream.cpp [308:406]
int LocalSofaDataStream::open(size_t minbufsize) {
Type type = iv_psofafs->getType();
Feature stringfeat = type.getFeatureByBaseName(CAS::FEATURE_BASE_NAME_SOFASTRING);
Feature arrayfeat = type.getFeatureByBaseName(CAS::FEATURE_BASE_NAME_SOFAARRAY);
iv_curpos=0;
if ( !iv_psofafs->isUntouchedFSValue(stringfeat) ) { //local sofa - data in string
//convert string to UTF-8
UErrorCode errorcode = U_ZERO_ERROR ;
iv_size=0;
int32_t len;
iv_psofadata = u_strToUTF8(NULL, 0,
&len,
iv_psofafs->getStringValue(stringfeat).getBuffer(),
iv_psofafs->getStringValue(stringfeat).length(),
&errorcode);
if (!U_SUCCESS(errorcode) && errorcode != U_BUFFER_OVERFLOW_ERROR ) {
ErrorMessage errMsg = ErrorMessage(UIMA_MSG_ID_EXC_LOCAL_SOFADATA_UNSUPPORTED_TYPE);
errMsg.addParam(stringfeat.getName());
UIMA_EXC_THROW_NEW(SofaDataStreamException,
UIMA_ERR_SOFADATASTREAM,
errMsg,
UIMA_MSG_ID_EXCON_SOFADATASTREAM,
ErrorInfo::unrecoverable);
}
iv_pstringsofadata = new char[len];
iv_size = len;
errorcode = U_ZERO_ERROR ;
iv_psofadata = u_strToUTF8(iv_pstringsofadata, iv_size,
&len,
iv_psofafs->getStringValue(stringfeat).getBuffer(),
iv_psofafs->getStringValue(stringfeat).length(),
&errorcode);
if (!U_SUCCESS(errorcode) ) {
ErrorMessage errMsg = ErrorMessage(UIMA_MSG_ID_EXC_LOCAL_SOFADATA_UNSUPPORTED_TYPE);
errMsg.addParam(stringfeat.getName());
UIMA_EXC_THROW_NEW(SofaDataStreamException,
UIMA_ERR_SOFADATASTREAM,
errMsg,
UIMA_MSG_ID_EXCON_SOFADATASTREAM,
ErrorInfo::unrecoverable);
}
iv_isstring=true;
} else if ( !iv_psofafs->isUntouchedFSValue(arrayfeat) ) { //local sofa - data in fs array
FeatureStructure arrayFS = iv_psofafs->getFSValue(arrayfeat);
Type rangeType = arrayFS.getType();
UnicodeStringRef rangeTypeName = rangeType.getName();
if (rangeTypeName.compare(CAS::TYPE_NAME_INTEGER_ARRAY) ==0) {
iv_psofadata = (char*) iv_psofafs->getCAS().getHeap()->getCArrayFromFS(arrayFS.iv_tyFS);
iv_size = iv_psofafs->getIntArrayFSValue(arrayfeat).size()*sizeof(int);
iv_isintarray = true;
} else if (rangeTypeName.compare( CAS::TYPE_NAME_FLOAT_ARRAY) ==0) {
iv_psofadata = (char*) iv_psofafs->getCAS().getHeap()->getCArrayFromFS(arrayFS.iv_tyFS);
iv_size= iv_psofafs->getFloatArrayFSValue(arrayfeat).size()*sizeof(float);
iv_isfloatarray = true;
} else if (rangeTypeName.compare( CAS::TYPE_NAME_BOOLEAN_ARRAY) ==0) {
iv_psofadata = (char*) iv_psofafs->getCAS().getHeap()->get8BitArray(arrayFS.iv_tyFS);
iv_size= iv_psofafs->getBooleanArrayFSValue(arrayfeat).size()*sizeof(char);
iv_isbooleanarray = true;
} else if (rangeTypeName.compare( CAS::TYPE_NAME_BYTE_ARRAY) ==0) {
iv_psofadata = (char*) iv_psofafs->getCAS().getHeap()->get8BitArray(arrayFS.iv_tyFS);
iv_size= iv_psofafs->getByteArrayFSValue(arrayfeat).size()*sizeof(char);
iv_isbytearray = true;
} else if (rangeTypeName.compare( CAS::TYPE_NAME_SHORT_ARRAY) ==0) {
iv_psofadata = (char*) iv_psofafs->getCAS().getHeap()->get16BitArray(arrayFS.iv_tyFS);
iv_size= iv_psofafs->getShortArrayFSValue(arrayfeat).size()*sizeof(short);
iv_isshortarray = true;
} else if (rangeTypeName.compare( CAS::TYPE_NAME_LONG_ARRAY) ==0) {
iv_psofadata = (char*) iv_psofafs->getCAS().getHeap()->get64BitArray(arrayFS.iv_tyFS);
iv_size= iv_psofafs->getLongArrayFSValue(arrayfeat).size()*sizeof(INT64);
iv_islongarray = true;
} else if (rangeTypeName.compare( CAS::TYPE_NAME_DOUBLE_ARRAY) ==0) {
iv_psofadata = (char*) iv_psofafs->getCAS().getHeap()->get64BitArray(arrayFS.iv_tyFS);
iv_size= iv_psofafs->getDoubleArrayFSValue(arrayfeat).size()*sizeof(INT64);
iv_isdoublearray = true;
} else {
ErrorMessage errMsg = ErrorMessage(UIMA_MSG_ID_EXC_LOCAL_SOFADATA_UNSUPPORTED_TYPE);
errMsg.addParam(rangeTypeName);
UIMA_EXC_THROW_NEW(SofaDataStreamException,
UIMA_ERR_SOFADATASTREAM,
errMsg,
UIMA_MSG_ID_EXCON_SOFADATASTREAM,
ErrorInfo::unrecoverable);
}
} else {
ErrorMessage errMsg = ErrorMessage(UIMA_MSG_ID_EXC_LOCAL_SOFADATA_NOTSET);
errMsg.addParam(type.getName());
UIMA_EXC_THROW_NEW(SofaDataStreamException,
UIMA_ERR_SOFADATASTREAM,
errMsg,
UIMA_MSG_ID_EXCON_SOFADATASTREAM,
ErrorInfo::unrecoverable);
}
return 0;
}