public CompileLog generateStructDeclaration(StringBuilder codeBuilder, TbsStruct tbs) { var log = new CompileLog(); codeBuilder.AppendLine($"struct {tbs.Typename};"); return(log); }
public CompileLog generateStructDefinition(StringBuilder codeBuilder, TbsStruct tbs) { var log = new CompileLog(); codeBuilder.AppendLine($"struct {tbs.Typename} {{ //Size={tbs.PhysicalSize}"); foreach (var member in tbs.Members) { if (member.IsScalar) { codeBuilder.AppendLine($"{member.Typename} {member.Identifier};//@Offset {member.LocalOffset}"); } else { codeBuilder.AppendLine($"{member.Typename} {member.Identifier}[{member.ArraySize}];//ArrSize={member.ArraySize} @Offset {member.LocalOffset}"); } } codeBuilder.AppendLine($"}};\n"); return(log); }
public CompileLog generateStructDefinition(StringBuilder codeBuilder, TbsStruct tbs) { var log = new CompileLog(); if (CsPublicDatastructure) { codeBuilder.Append("public "); } codeBuilder.AppendLine($"class {tbs.Typename} : Tinybuffers.IBufferable {{"); codeBuilder.AppendLine($" public int Size => {tbs.PhysicalSize};"); codeBuilder.AppendLine(""); //Members foreach (var member in tbs.Members) { if (member.IsScalar) { codeBuilder.AppendLine($" public {member.Typename} {member.Identifier}; //@Offset {member.LocalOffset}"); } else { codeBuilder.AppendLine($" public {member.Typename}[] {member.Identifier} = new {member.Typename}[{member.ArraySize}]; //@Offset {member.LocalOffset}"); } } codeBuilder.AppendLine(""); //BuildBuffer Method codeBuilder.AppendLine($"public void BuildBuffer(byte[] buffer, int atOffset = 0) {{"); foreach (var member in tbs.Members) { string additionalCast = (member.Type is TbsEnum) ? "(Byte)" : ""; codeBuilder.AppendLine($" buffer.SetPartialBuffer({additionalCast}this.{member.Identifier}, atOffset + {member.LocalOffset});"); } codeBuilder.AppendLine($"}}"); //UnpackBuffer Method codeBuilder.AppendLine($"public void Unbuffer(in byte[] buffer, int atOffset = 0) {{"); foreach (var member in tbs.Members) { if (member.Type is TbsEnum) { codeBuilder.AppendLine($" Byte _{member.Identifier} = (Byte)this.{member.Identifier};"); codeBuilder.AppendLine($" buffer.ReadInto(ref _{member.Identifier}, atOffset + {member.LocalOffset});"); codeBuilder.AppendLine($" this.{member.Identifier} = ({member.Typename})_{member.Identifier};"); } else { codeBuilder.AppendLine($" buffer.ReadInto(ref this.{member.Identifier}, atOffset + {member.LocalOffset});"); } } codeBuilder.AppendLine($"}}"); //Conviniece Methods codeBuilder.AppendLine($"public {tbs.Typename}(in byte[] buffer) {{"); codeBuilder.AppendLine($" Unbuffer(buffer);"); codeBuilder.AppendLine($"}}"); codeBuilder.AppendLine($"public byte[] BuildBuffer() {{"); codeBuilder.AppendLine($" byte[] outputBuffer = new byte[Size];"); codeBuilder.AppendLine($" BuildBuffer(outputBuffer);"); codeBuilder.AppendLine($" return outputBuffer;"); codeBuilder.AppendLine($"}}"); codeBuilder.AppendLine($"}};\n"); return(log); }
public CompileLog generateStructDeclaration(StringBuilder codeBuilder, TbsStruct tbs) { return(new CompileLog()); //C# doesnt require forward Declarations }