char *stringValue(Val_t val) { s57key_t *key = findKey(val.key); strcpy(outstr, ""); switch (val.type) { case A: case S: strcpy(outstr, val.val.a); break; case E: if (findVal(key, val.val.e) == NULL) break; strcpy(outstr, findEnum(key, val.val.e)); break; case L: { strcpy(outstr, ""); Lst_t *lst = val.val.l; while (lst != NULL) { strcat(outstr, findEnum(key, lst->val)); lst = lst->next; if (lst != NULL) strcat(outstr, ";"); } } break; case I: sprintf(outstr, "%ld", val.val.i); break; case F: sprintf(outstr, "%g", val.val.f); break; } return outstr; }
AbstractEnumDataInformation* OsdParser::enumFromXML(const QDomElement& xmlElem, bool isFlags) { if (!mEnumsParsed) //not always needed parseEnums(); QString name = xmlElem.attribute(QLatin1String("name"), i18n("<invalid name>")); QString typeStr = xmlElem.attribute(QLatin1String("type"), QString()); if (typeStr.isEmpty()) { kWarning() << "no type attribute defined"; return NULL; } QString enumName = xmlElem.attribute(QLatin1String("enum"), QString()); if (enumName.isEmpty()) { kWarning() << "no enum attribute defined"; return NULL; } EnumDefinition::Ptr def = findEnum(enumName); if (!def) { kWarning() << "no enum with name " << enumName << "found."; return NULL; } PrimitiveDataInformation* prim = PrimitiveFactory::newInstance(name, typeStr); if (!prim) { kWarning() << "primitive type is null!!"; return NULL; } if (isFlags) return new FlagDataInformation(name, prim, def); else return new EnumDataInformation(name, prim, def); }