private string WriteHashtable(EnumMapping mapping, string typeName)
{
CodeIdentifier.CheckValidIdentifier(typeName);
string propName = MakeUnique(mapping, typeName + "Values");
if (propName == null) return CodeIdentifier.GetCSharpName(typeName);
string memberName = MakeUnique(mapping, "_" + propName);
propName = CodeIdentifier.GetCSharpName(propName);
Writer.WriteLine();
Writer.Write(typeof(Hashtable).FullName);
Writer.Write(" ");
Writer.Write(memberName);
Writer.WriteLine(";");
Writer.WriteLine();
Writer.Write("internal ");
Writer.Write(typeof(Hashtable).FullName);
Writer.Write(" ");
Writer.Write(propName);
Writer.WriteLine(" {");
Writer.Indent++;
Writer.WriteLine("get {");
Writer.Indent++;
Writer.Write("if ((object)");
Writer.Write(memberName);
Writer.WriteLine(" == null) {");
Writer.Indent++;
Writer.Write(typeof(Hashtable).FullName);
Writer.Write(" h = new ");
Writer.Write(typeof(Hashtable).FullName);
Writer.WriteLine("();");
ConstantMapping[] constants = mapping.Constants;
for (int i = 0; i < constants.Length; i++)
{
Writer.Write("h.Add(");
WriteQuotedCSharpString(constants[i].XmlName);
if (!mapping.TypeDesc.UseReflection)
{
Writer.Write(", (long)");
Writer.Write(mapping.TypeDesc.CSharpName);
Writer.Write(".@");
CodeIdentifier.CheckValidIdentifier(constants[i].Name);
Writer.Write(constants[i].Name);
}
else
{
Writer.Write(", ");
Writer.Write(constants[i].Value.ToString(CultureInfo.InvariantCulture) + "L");
}
Writer.WriteLine(");");
}
Writer.Write(memberName);
Writer.WriteLine(" = h;");
Writer.Indent--;
Writer.WriteLine("}");
Writer.Write("return ");
Writer.Write(memberName);
Writer.WriteLine(";");
Writer.Indent--;
Writer.WriteLine("}");
Writer.Indent--;
Writer.WriteLine("}");
return propName;
}