Exemple #1
0
        public CompileLog generateStructDeclaration(StringBuilder codeBuilder, TbsStruct tbs)
        {
            var log = new CompileLog();

            codeBuilder.AppendLine($"struct {tbs.Typename};");
            return(log);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
 public CompileLog generateStructDeclaration(StringBuilder codeBuilder, TbsStruct tbs)
 {
     return(new CompileLog()); //C# doesnt require forward Declarations
 }