Exemplo n.º 1
0
        public static Node FromStreamV2(BinaryReader reader, int index, StringBlock stringBlock, byte[] dataBlock)
        {
            reader.BaseStream.Seek(index * 17, SeekOrigin.Begin);
            var nameOffset   = reader.ReadInt32();
            var siblingIndex = reader.ReadInt32();
            var name         = stringBlock.GetString(nameOffset);
            var type         = reader.ReadByte();

            if (type == 0)
            {
                return(IntermediateNode.IntermediateV2(siblingIndex, name, reader, stringBlock, dataBlock));
            }
            else
            {
                return(LeafNode.LeafV2(siblingIndex, name, reader, type, dataBlock));
            }
        }
Exemplo n.º 2
0
        public IntermediateNode(int peerOffset, string name, BinaryReader reader, StringBlock stringBlock, byte[] dataBlock)
            : base(peerOffset, name)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            //int zero = reader.ReadInt32();
            reader.BaseStream.Seek(sizeof(int), SeekOrigin.Current);

            children = new List <Node>();

            int childOffset = reader.ReadInt32();

            if (childOffset > 0)
            {
                int next = childOffset;
                do
                {
                    if (children.Count > 500000)
                    {
                        throw new Exception("Node overflow. Broken UTF?");
                    }
                    Node n = Node.FromStream(reader, next, stringBlock, dataBlock);
                    children.Add(n);
                    next = n.PeerOffset;
                } while (next > 0);
            }
            //else
            //throw new FileContentsException(UtfFile.FILE_TYPE, "IntermediateNode " + Name + " doesn't have any child nodes.");

            //int allocatedSize = reader.ReadInt32();
            //int size = reader.ReadInt32();
            //int size2 = reader.ReadInt32();
            //int timestamp1 = reader.ReadInt32();
            //int timestamp2 = reader.ReadInt32();
            //int timestamp3 = reader.ReadInt32();
        }
Exemplo n.º 3
0
        public static Node FromStream(BinaryReader reader, int offset, StringBlock stringBlock, byte[] dataBlock)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }
            if (stringBlock == null)
            {
                throw new ArgumentNullException("stringBlock");
            }
            if (dataBlock == null)
            {
                throw new ArgumentNullException("dataBlock");
            }

            reader.BaseStream.Seek(offset, SeekOrigin.Begin);

            int    peerOffset = reader.ReadInt32();
            int    nameOffset = reader.ReadInt32();
            string name       = stringBlock.GetString(nameOffset);

            NodeFlags flags = (NodeFlags)reader.ReadInt32();

            if ((flags & NodeFlags.Intermediate) == NodeFlags.Intermediate)
            {
                return(new IntermediateNode(peerOffset, name, reader, stringBlock, dataBlock));
            }
            else if ((flags & NodeFlags.Leaf) == NodeFlags.Leaf)
            {
                return(new LeafNode(peerOffset, name, reader, dataBlock));
            }
            else
            {
                //throw new FileContentException(UtfFile.FILE_TYPE, "Neither required flag set. Flags: " + flags);
                return(new LeafNode(peerOffset, name, reader, dataBlock));
            }
        }