void XCASWriter::writeFSFlat()

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;
    }
  }