in src/cas/xmideserializer_handler.cpp [997:1056]
void XmiDeserializerHandler::handleFeature(lowlevel::TyFS addr,
lowlevel::TyFSFeature featCode,
lowlevel::TyFSType rangeTypeCode,
vector<string> & featVals) {
//cout << "handleFeature array/list " << featVals.size() << endl;
switch(rangeTypeCode) {
case internal::gs_tyBooleanArrayType:
case internal::gs_tyByteArrayType:
case internal::gs_tyIntArrayType:
case internal::gs_tyFloatArrayType:
case internal::gs_tyLongArrayType:
case internal::gs_tyShortArrayType:
case internal::gs_tyDoubleArrayType:
case internal::gs_tyFSArrayType: {
int arrayFS = createArray(rangeTypeCode, featVals, -1);
iv_cas->getHeap()->setFSValue(addr,featCode,arrayFS);
break;
}
case internal::gs_tyStringArrayType: {
//cout << "handleFeature of type string array" << endl;
int arrayFS = createArray(rangeTypeCode, featVals, -1);
iv_cas->getHeap()->setFSValue(addr,featCode,arrayFS);
break;
}
case internal::gs_tyIntListType: {
int arrayFS = createIntList(featVals);
iv_cas->getHeap()->setFSValue(addr,featCode,arrayFS);
break;
}
case internal::gs_tyFloatListType: {
int arrayFS = createFloatList(featVals);
iv_cas->getHeap()->setFSValue(addr,featCode,arrayFS);
break;
}
case internal::gs_tyStringListType: {
int arrayFS = createStringList(featVals);
iv_cas->getHeap()->setFSValue(addr,featCode,arrayFS);
break;
}
case internal::gs_tyFSListType: {
int arrayFS = createFSList(featVals);
iv_cas->getHeap()->setFSValue(addr,featCode,arrayFS);
break;
}
default: {
//scalar and FS type
if (featVals.size() != 1) {
//TODO log
cerr << "one feature value expected " << endl;
} else {
Type type = internal::FSPromoter::promoteType(rangeTypeCode,
iv_cas->getTypeSystem().getLowlevelTypeSystem());
icu::UnicodeString val(featVals.at(0).c_str());
handleFeature(type,
addr, featCode,val, true);
}
break;
}
}
}