Exemple #1
0
        private static void MakeTreenode(ByamlTreeNode node)
        {
            if (node.ByamlNode.NodeType == ByamlNodeType.Array)
            {
                var array = (List <ByamlEntry>)node.ByamlNode.Value;

                for (int i = 0; i < array.Count; i++)
                {
                    if (!ByamlParser.NodeIsValue(array[i].NodeType))
                    {
                        var child = new ByamlTreeNode(array[i], i.ToString());
                        node.Nodes.Add(child);
                        MakeTreenode(child);
                    }
                }
            }
            else if (node.ByamlNode.NodeType == ByamlNodeType.Dictionary)
            {
                var dict = (Dictionary <string, ByamlEntry>)node.ByamlNode.Value;

                foreach (var item in dict)
                {
                    if (!ByamlParser.NodeIsValue(item.Value.NodeType))
                    {
                        var child = new ByamlTreeNode(item.Value, item.Key);
                        node.Nodes.Add(child);
                        MakeTreenode(child);
                    }
                }
            }
        }
Exemple #2
0
        private void WriteByaml(BinaryDataWriter bw)
        {
            string magic = (BOM == ByteOrder.BigEndian || (BOM == ByteOrder.System && !BitConverter.IsLittleEndian))
                ? "BY"
                : "YB";

            bw.Write(Encoding.ASCII.GetBytes(magic));
            bw.Write(ByamlVersion);
            bw.Write(0x10);

            GenerateStringLists();

            long tempStrTableOff = bw.Position;

            bw.Write(0); //temp
            long tempRootNodeOff = bw.Position;

            bw.Write(0); //temp

            ByamlParser.WriteStringList(NameTable, bw);
            long tempPos = bw.Position;

            using (bw.TemporarySeek(tempStrTableOff, SeekOrigin.Begin))
                bw.Write((int)tempPos);

            ByamlParser.WriteStringList(Stringtable, bw);
            tempPos = bw.Position;
            using (bw.TemporarySeek(tempRootNodeOff, SeekOrigin.Begin))
                bw.Write((int)tempPos);

            if (RootNode.NodeType == ByamlNodeType.Array)
            {
                ByamlParser.WriteArray(this, RootNode, bw);
            }
            else if (RootNode.NodeType == ByamlNodeType.Dictionary)
            {
                ByamlParser.WriteDictionary(this, RootNode, bw);
            }
        }
Exemple #3
0
        private void ReadByaml(BinaryDataReader br)
        {
            string magic = Encoding.ASCII.GetString(br.ReadBytes(2));

            switch (magic)
            {
            case "BY": br.ByteOrder = ByteOrder.BigEndian; break;

            case "YB": br.ByteOrder = ByteOrder.LittleEndian; break;

            default: throw new ByamlException("Invalid Header");
            }
            BOM = br.ByteOrder;

            ByamlVersion = br.ReadUInt16();
            uint headerSize        = br.ReadUInt32();
            uint stringTableOffset = br.ReadUInt32();
            uint dataOffset        = br.ReadUInt32();

            br.Seek(headerSize, SeekOrigin.Begin);
            NameTable = (List <string>)ByamlParser.ParseStringTable(this, br).Value;

            br.Seek(stringTableOffset, SeekOrigin.Begin);
            Stringtable = (List <string>)ByamlParser.ParseStringTable(this, br).Value;

            br.Seek(dataOffset, SeekOrigin.Begin);
            ByamlNodeType t = (ByamlNodeType)br.ReadByte();

            switch (t)
            {
            case ByamlNodeType.Array:
            case ByamlNodeType.Dictionary:
                br.Position--;
                RootNode = ByamlParser.ParseEntry(this, t, br);
                break;

            default: throw new ByamlException("Invalid Root Node");
            }
        }
Exemple #4
0
 public void SerializeObject(object obj)
 {
     RootNode = ByamlParser.ProcessEntrySerialization(obj);
 }
Exemple #5
0
 public T Deserialize <T>()
 {
     return((T)ByamlParser.ProcessEntryDeserialization(RootNode, typeof(T)));
 }