char HField::save(AField * fld) { if(fld->numChannels() < 1) { std::cout<<"\n field has no channel"; return 0; } if(!hasNamedAttr(".fieldType")) addIntAttr(".fieldType"); int t = fld->fieldType(); writeIntAttr(".fieldType", &t); std::vector<std::string > names; fld->getChannelNames(names); int nc = names.size(); if(!hasNamedAttr(".fieldNumChannels")) addIntAttr(".fieldNumChannels"); writeIntAttr(".fieldNumChannels", &nc); std::string combined = SHelper::Combine(names); if(!hasNamedAttr(".fieldChannelNames")) addStringAttr(".fieldChannelNames", combined.size()); writeStringAttr(".fieldChannelNames", combined); std::vector<std::string >::const_iterator it = names.begin(); for(; it!= names.end();++it) saveAChannel(*it, fld->namedChannel(*it)); return 1; }
char HNumericBundle::save(const ABundleAttribute * d) { if(!hasNamedAttr(".longname")) addStringAttr(".longname", d->longName().size()); writeStringAttr(".longname", d->longName()); int sz = d->size(); if(!hasNamedAttr(".bundle_sz")) addIntAttr(".bundle_sz"); writeIntAttr(".bundle_sz", &sz); int nt = d->numericType(); if(!hasNamedAttr(".bundle_num_typ")) addIntAttr(".bundle_num_typ"); writeIntAttr(".bundle_num_typ", &nt); int l = d->dataLength(); if(!hasNamedData(".raw")) addCharData(".raw", l); writeCharData(".raw", l, (char *)d->value()); return 1; }
void HAttributeGroup::writeEnum(AEnumAttribute * data) { short a, b; int v = data->value(a, b); if(!hasNamedAttr(".val")) addIntAttr(".val"); writeIntAttr(".val", &v); int r[2]; r[0] = a; r[1] = b; if(!hasNamedAttr(".range")) addIntAttr(".range", 2); writeIntAttr(".range", r); // std::cout<<" value "<<v; // std::cout<<" range "<<a<<":"<<b; short i; std::stringstream sst; for(i=a; i<=b; i++) { std::string fn = data->fieldName(i); sst.str(""); sst<<i; if(!hasNamedAttr(sst.str().c_str())) addStringAttr(sst.str().c_str(), fn.size()); writeStringAttr(sst.str().c_str(), fn); // std::cout<<" field "<<i<<":"<<fn; } }
void HAttributeGroup::writeString(AStringAttribute * data) { std::string v = data->value(); if(!hasNamedAttr(".val")) addStringAttr(".val", v.size()); writeStringAttr(".val", v); std::cout<<" value "<<v; }
char HAttributeGroup::save(AAttribute * data) { if(!hasNamedAttr(".attr_typ")) addIntAttr(".attr_typ"); int t = data->attrType(); writeIntAttr(".attr_typ", &t); // std::cout<<"\nsave attr type "<<data->attrTypeStr(); if(!hasNamedAttr(".longname")) addStringAttr(".longname", data->longName().size()); writeStringAttr(".longname", data->longName()); // std::cout<<"\nsave attr name "<<data->longName(); if(data->isNumeric()) writeNumeric( static_cast<ANumericAttribute *> (data) ); else if(data->isEnum()) writeEnum( static_cast<AEnumAttribute *> (data) ); else if(data->isString()) writeString( static_cast<AStringAttribute *> (data) ); else if(data->isCompound()) writeCompound( static_cast<ACompoundAttribute *> (data) ); return 1; }