void GenerateGetXmlEnumValue (XmlTypeMapping map)
{
EnumMap emap = (EnumMap) map.ObjectMap;
string xmlNamesArray = null;
string valuesArray = null;
if (emap.IsFlags) {
// create static string[] holding XML names of enum constants
xmlNamesArray = GetUniqueName ("gxe", map, "_xmlNames" + map.XmlType);
Write ("static readonly string[] " + xmlNamesArray + " = { ");
for (int i = 0; i < emap.XmlNames.Length; i++) {
if (i > 0)
_writer.Write (',');
_writer.Write ('"');
_writer.Write (emap.XmlNames[i]);
_writer.Write ('\"');
}
_writer.WriteLine (" };");
// create const long[] holding values of enum constants
valuesArray = GetUniqueName ("gve", map, "_values" + map.XmlType);
Write ("static readonly long[] " + valuesArray + " = { ");
for (int i = 0; i < emap.Values.Length; i++) {
if (i > 0)
_writer.Write (',');
_writer.Write (emap.Values[i].ToString (CultureInfo.InvariantCulture));
_writer.Write ("L");
}
_writer.WriteLine (" };");
WriteLine (string.Empty);
}
WriteLine ("string " + GetGetEnumValueName (map) + " (" + map.TypeData.CSharpFullName + " val)");
WriteLineInd ("{");
WriteLineInd ("switch (val) {");
for (int i = 0; i < emap.EnumNames.Length; i++)
WriteLine ("case " + map.TypeData.CSharpFullName + ".@" + emap.EnumNames[i] + ": return " + GetLiteral (emap.XmlNames[i]) + ";");
if (emap.IsFlags) {
WriteLineInd ("default:");
// FromEnum actually covers this case too, but we save some cycles here
WriteLine ("if (val.ToString () == \"0\") return string.Empty;");
Write ("return FromEnum ((long) val, " + xmlNamesArray + ", " + valuesArray);
#if NET_2_0
_writer.Write (", typeof (");
_writer.Write (map.TypeData.CSharpFullName);
_writer.Write (").FullName");
#endif
_writer.Write (')'); // close FromEnum method call
WriteUni (";"); // end statement
} else {
#if NET_2_0
WriteLine ("default: throw CreateInvalidEnumValueException ((long) val, typeof (" + map.TypeData.CSharpFullName + ").FullName);");
#else
WriteLine ("default: return ((long)val).ToString(CultureInfo.InvariantCulture);");
#endif
}
WriteLineUni ("}");
WriteLineUni ("}");
WriteLine ("");
}