public void Write(CodeNamespace n) { CodeTypeDeclaration decl = new CodeTypeDeclaration(Name); decl.TypeAttributes = TypeAttributes.Public; decl.Attributes = MemberAttributes.Public; decl.IsEnum = true; if (BaseTypeID != -1) { decl.BaseTypes.Add(FieldTypeRegistry.Fields[BaseTypeID].CodeType); } if (Documentation != null) { decl.Documentation.Add(new CodeDocumentationSummaryNode(Documentation)); } foreach (var m in Members) { CodeMemberField fld = new CodeMemberField(decl.Name, m.Name); if (m.Documentation != null) fld.Documentation.Add(new CodeDocumentationSummaryNode(m.Documentation)); if (m.Value != null) { if (m.ShowValueAsHex) { fld.InitExpression = new CodePrimitiveExpression(m.Value.Value); ((CodePrimitiveExpression)fld.InitExpression).PrintAsHex = true; } else { fld.InitExpression = new CodePrimitiveExpression((int)m.Value.Value); } } decl.Members.Add(fld); } n.Types.Add(decl); }
protected override void GenerateField(CodeMemberField field) { if (base.IsCurrentDelegate || base.IsCurrentInterface) { return; } TextWriter output = base.Output; if (base.IsCurrentEnum) { base.Output.Write(this.GetSafeName(field.Name)); } else { MemberAttributes attributes = field.Attributes; this.OutputMemberAccessModifier(attributes); this.OutputVTableModifier(attributes); this.OutputFieldScopeModifier(attributes); this.OutputTypeNamePair(field.Type, this.GetSafeName(field.Name)); } CodeExpression initExpression = field.InitExpression; if (initExpression != null) { output.Write(" = "); base.GenerateExpression(initExpression); } if (base.IsCurrentEnum) { output.WriteLine(','); } else { output.WriteLine(';'); } }
public void RequestField(int tp, int count) { for (int i = 0; i < count; i++) { FieldTypeNumPair key = new FieldTypeNumPair(tp, i); if (!Fields.ContainsKey(key)) { string fieldPrefix = FieldTypeRegistry.Fields[tp].Prefix != "" ? FieldTypeRegistry.Fields[tp].Prefix : "local_"; string fieldName = fieldPrefix + FieldDeclarations.Count.ToString(); CodeMemberField fld = new CodeMemberField(FieldTypeRegistry.Fields[tp].Name, fieldName); fld.Attributes = MemberAttributes.Private; // A field's value is only ever assigned in // the constructor, and that only occurs on // the current thread, so we make this information // available to whatever language's compiler // we're using. (readonly in C#) fld.Attributes |= MemberAttributes.Final; FieldDeclarations.Add(fld); FieldNames.Add(fieldName); Fields[key] = FieldDeclarations.Count - 1; } } }