示例#1
0
		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(';');
			}
		}
示例#3
0
        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;
				}
			}
		}