/// <summary> /// Generates a bit string type /// </summary> /// <param name="emitter">The emitter to write to</param> /// <param name="typeName">The name of the type</param> /// <param name="def">The bitstring definition</param> private void _generateBitString(CSharpEmitter emitter, string typeName, string fieldName, BitStringDefinition def) { typeName = _getDefinitionName(typeName, fieldName, def); using (var s = emitter.Struct(typeName)) { using (var bits = emitter.Enum("Bits", "byte")) { for (int i = 0; i < def.Bits.Length; i++) { var bit = def.Bits[i]; bits.EnumValue(_transformFieldName(bit.Name), bit.Index, i == def.Bits.Length - 1); } } s.WriteLine(); s.WriteLine("private BitString56 _bitstring;"); s.WriteLine(); s.WriteLineRaw("public byte Length { get { return _bitstring.Length; } }"); s.WriteLine(); s.WriteLine("public bool this[Bits bit] {{ get {{ return _bitstring[(int)bit]; }} }}"); s.WriteLine(); using (var cons = s.Constructor(typeName, new Parameter[] { new Parameter("BitString56", "bitstring") })) { cons.WriteLine("this._bitstring = bitstring;"); } s.WriteLine(); s.WriteLine("public {0} WithLength(byte length) {{ return new {0}(_bitstring.WithLength(length)); }}", typeName); s.WriteLine(); s.WriteLine("public {0} WithBit(Bits bit, bool set = true) {{ return new {0}(_bitstring.WithBit((int)bit, set)); }}", typeName); s.WriteLine(); s.StaticReadonlyField("Schema", "ISchema", "PrimitiveSchema.BitString56Schema"); s.WriteLine(); using (var load = s.StaticMethod("Load", typeName, new Parameter[] { new Parameter("IValueStream", "stream") })) { load.WriteLine("var temp = Value<BitString56>.Load(stream);"); load.WriteLine("return new {0}(temp);", typeName); } s.WriteLine(); using (var save = s.StaticMethod("Save", "void", new Parameter[] { new Parameter("IValueSink", "sink"), new Parameter(typeName, "value") })) { save.WriteLine("Value<BitString56>.Save(sink, value._bitstring);"); } } }
/// <summary> /// Generates the tags enumeration for a choice /// </summary> /// <param name="emitter">The emitter to write to</param> /// <param name="def">The choice definition</param> private void _generateChoiceTags(CSharpEmitter emitter, ChoiceDefinition def) { emitter.WriteLine(); using (var tagEmitter = emitter.Enum("Tags", "byte")) { for (int i = 0; i < def.Fields.Length; i++) { var field = def.Fields[i]; var fieldName2 = _transformFieldName(field.Name); tagEmitter.EnumValue(fieldName2, i, i == def.Fields.Length - 1); } } }
/// <summary> /// Generates an enumeration type /// </summary> /// <param name="emitter">The emitter to write to</param> /// <param name="typeName">The name of the type</param> /// <param name="def">The enumeration definition</param> private void _generateEnumeration(CSharpEmitter emitter, string typeName, string fieldName, EnumerationDefinition def) { typeName = _getDefinitionName(typeName, fieldName, def); using (var e = emitter.Enum(typeName)) { for (int i = 0; i < def.Options.Length; i++) { var opt = def.Options[i]; var optName = _transformFieldName(opt.Name); e.EnumValue(optName, opt.Value, i == def.Options.Length - 1); } } }
/// <summary> /// Generates an enumeration type /// </summary> /// <param name="emitter">The emitter to write to</param> /// <param name="typeName">The name of the type</param> /// <param name="def">The enumeration definition</param> private void _generateEnumeration(CSharpEmitter emitter, string typeName, string fieldName, EnumerationDefinition def) { typeName = _getDefinitionName(typeName, fieldName, def); using(var e = emitter.Enum(typeName)) { for(int i = 0; i < def.Options.Length; i++) { var opt = def.Options[i]; var optName = _transformFieldName(opt.Name); e.EnumValue(optName, opt.Value, i == def.Options.Length - 1); } } }