in src/cas/xmlwriter.cpp [506:601]
void XCASWriter::writeFSFlat(ostream & os,
FeatureStructure const & fs,
vector<int>* indexInfo) {
uima::internal::CASImpl const & crCASImpl = uima::internal::CASImpl::promoteCAS(iv_cas);
assert( fs.isValid() );
Type t = fs.getType();
// if ( iv_sofaType == t) {
// if ( isBCCas )
// return;
// }
os << " <" << t.getName();
if (indexInfo->size() > 0) {
os << " _indexed=\"";
for (size_t i=0; i< indexInfo->size(); i++) {
if (i != 0) {
os << " ";
}
os << indexInfo->at(i);
}
os << "\"";
}
os << " _id=\"" << crCASImpl.getHeap().getUniqueID( uima::internal::FSPromoter::demoteFS(fs) ) << "\"";
// if array
if ( iv_arrayType.subsumes(t) ) {
if ( t == iv_intArrayType ) {
writeArray( os, IntArrayFS(fs), "i");
} else if ( t == iv_floatArrayType ) {
writeArray( os, FloatArrayFS(fs), "i");
} else if ( t == iv_stringArrayType ) {
writeStringArray( os, StringArrayFS(fs), "i");
} else if ( t == iv_byteArrayType ) {
ByteArrayFS array(fs);
if (array.size() > 0) {
os << " size=\"" << array.size() << "\">" << endl;
size_t i;
for (i=0; i<array.size(); ++i) {
os << " <" << "i" << ">";
int val = array.get(i);
os << val;
os << "</" << "i" << ">" << endl;
}
os << " </" << array.getType().getName() << ">" << endl;
}
} else if ( t == iv_booleanArrayType ) {
writeArray( os, BooleanArrayFS(fs), "i");
} else if ( t == iv_shortArrayType ) {
writeArray( os, ShortArrayFS(fs), "i");
} else if ( t == iv_longArrayType ) {
writeArray( os, LongArrayFS(fs), "i");
} else if ( t == iv_doubleArrayType ) {
DoubleArrayFS array(fs);
if (array.size() > 0) {
os << " size=\"" << array.size() << "\">" << endl;
size_t i;
for (i=0; i<array.size(); ++i) {
os << " <" << "i" << ">";
stringstream s;
s << array.get(i);
os << s.str();
os << "</" << "i" << ">" << endl;
}
os << " </" << array.getType().getName() << ">" << endl;
} else {
os << " size=\"0\"/>" << endl;
}
} else {
assert( t == iv_cas.getTypeSystem().getType(uima::CAS::TYPE_NAME_FS_ARRAY) );
ArrayFS arrayFS = (ArrayFS) fs;
if (arrayFS.size() > 0) {
os << " size=\"" << arrayFS.size() << "\">" << endl;
size_t i;
for (i=0; i<arrayFS.size(); ++i) {
os << " <" << "i" << ">";
os << uima::internal::FSPromoter::demoteFS(arrayFS.get(i));
//writeFSFlat(os, arrayFS.get(i), sofa);
os << "</" << "i" << ">" << endl;
}
os << "</" << t.getName() << ">" << endl;
} else {
os << " size=\"0\"/>" << endl;
}
}
} else {
vector<Feature> features;
fs.getType().getAppropriateFeatures(features);
size_t i;
for (i=0; i<features.size(); ++i) {
uima::Feature const & f = features[i];
Type range;
f.getRangeType(range);
writeFeatureValue(os, fs, f);
}
os << "/>" << endl;
}
}