Ejemplo n.º 1
0
    public static void GenFbsStruct(FbsStruct fbsStruct, ref StringBuilder stringBuilder)
    {
        stringBuilder.AppendFormat("struct {0} {1}\n", fbsStruct.structName, "{");
        if (fbsStruct.isForceAlign)
        {
            stringBuilder.AppendFormat("struct {0} (force_align : {1}) {2}\n", fbsStruct.structName, fbsStruct.forceAlignSize, "{");
        }
        else
        {
            stringBuilder.AppendFormat("struct {0} {1}\n", fbsStruct.structName, "{");
        }

        if (fbsStruct.structFields != null && (fbsStruct.structFields.Count > 0))
        {
            int Count = fbsStruct.structFields.Count;
            for (int i = 0; i < Count; i++)
            {
                FbsStructField field = fbsStruct.structFields[i];
                stringBuilder.AppendFormat("  {0} : {1};\n", field.fieldName, GetFbsDataTypeString(field.dataType, false));
            }
        }
        // stringBuilder.Remove(stringBuilder.Length - 1, 1);
        stringBuilder.Append("}\n\n");
    }
Ejemplo n.º 2
0
    //flatbuff schema文件生成
    public static void GenFbsSchemaFile(FbsFile fbsFile, string fileOutDir, ref string fileFullpath)
    {
        //---------生成FBS文件---------
        StringBuilder stringBuilder = StrBuilder;

        stringBuilder.Clear();
        //spacename
        if (fbsFile.namespaceName != string.Empty)
        {
            stringBuilder.AppendFormat("namespace {0};\n\n", fbsFile.namespaceName);
        }

        //customAttribute
        if (fbsFile.customAttributes != null && fbsFile.customAttributes.Count > 0)
        {
            for (int i = 0; i < fbsFile.customAttributes.Count; i++)
            {
                string field = fbsFile.customAttributes[i];
                stringBuilder.AppendFormat("attribute \"{0}\";\n", field);
            }
        }
        //Enums
        if (fbsFile.enums != null && fbsFile.enums.Count > 0)
        {
            for (int i = 0; i < fbsFile.enums.Count; i++)
            {
                FbsEnum fbsenum = fbsFile.enums[i];
                GenFbsEnum(fbsenum, ref stringBuilder);
            }
        }
        //Structs
        if (fbsFile.structs != null && fbsFile.structs.Count > 0)
        {
            for (int i = 0; i < fbsFile.structs.Count; i++)
            {
                FbsStruct fbsStruct = fbsFile.structs[i];
                GenFbsStruct(fbsStruct, ref stringBuilder);
            }
        }

        //Unions
        if (fbsFile.unions != null && fbsFile.unions.Count > 0)
        {
            for (int i = 0; i < fbsFile.unions.Count; i++)
            {
                FbsUnion fbsUnion = fbsFile.unions[i];
                GenFbsUnion(fbsUnion, ref stringBuilder);
            }
        }

        //tables
        if (fbsFile.tables != null && fbsFile.tables.Count > 0)
        {
            for (int i = 0; i < fbsFile.tables.Count; i++)
            {
                FbsTable fbstable = fbsFile.tables[i];
                GenFbsTable(fbstable, ref stringBuilder);
            }
        }
        //根类型
        if (fbsFile.root_type != string.Empty)
        {
            stringBuilder.AppendFormat("root_type {0};\n", fbsFile.root_type);
        }
        else
        {
            Debug.LogError(fbsFile.fileName + " root_type is Empty!!!!");
        }
        // 文件标识
        if (fbsFile.file_identifier != string.Empty)
        {
            stringBuilder.AppendFormat("file_identifier \"{0}\";\n", fbsFile.file_identifier);
        }

        fileFullpath = fileOutDir + "/" + fbsFile.fileName + ".fbs";
        if (!Directory.Exists(fileOutDir))
        {
            Directory.CreateDirectory(fileOutDir);
        }
        if (File.Exists(fileFullpath))
        {
            File.Delete(fileFullpath);
        }
        FileStream   fs = new FileStream(fileFullpath, FileMode.Create);
        StreamWriter sw = new StreamWriter(fs, Encoding.UTF8);

        sw.Write(stringBuilder.ToString());
        sw.Close();
        fs.Close();
        stringBuilder.Clear();
    }