示例#1
0
 public static void ParseChildren(IEnumerable <NodeEntry> children, BinaryReader reader, List <INodeParser> parsers)
 {
     foreach (var node in children)
     {
         reader.BaseStream.Position = node.Offset;
         var parser = parsers.Where(p => p.ParsableNodeName == node.Name).FirstOrDefault();
         if (parser != null)
         {
             node.Value = parser.Read(node, reader, parsers);
         }
         else
         {
             var fallback = new DefaultParser();
             node.Value = fallback.Read(node, reader, parsers);
         }
     }
 }
示例#2
0
        public byte[] Write(NodeEntry node, List <INodeParser> parsers)
        {
            byte[] result;
            var    data = (DefaultRepresentation)node.Value;

            using (var stream = new MemoryStream())
            {
                using (var writer = new BinaryWriter(stream, Encoding.ASCII))
                {
                    writer.Write(node.Id);
                    writer.Write(data.Blob);

                    if (node.Children.Count > 0)
                    {
                        foreach (var child in node.Children)
                        {
                            var parser = parsers.Where(p => p.ParsableNodeName == child.Name).FirstOrDefault();
                            if (parser != null)
                            {
                                writer.Write(parser.Write(child, parsers));
                            }
                            else
                            {
                                var fallback = new DefaultParser();
                                writer.Write(fallback.Write(child, parsers));
                            }
                        }
                    }
                }
                result = stream.ToArray();
            }
            //we are recalculating the size while writing
            if (node.TrueSize == 0)//dont have their ID written
            {
                result = new byte[4];
            }
            return(result);
        }