Example #1
0
 internal Node(Nid nid, ulong dataBid, ulong subnodeBid, IPstReader reader)
 {
     Nid = nid;
     DataBid = dataBid;
     SubnodeBid = subnodeBid;
     _reader = reader;
 }
Example #2
0
        internal Node FindSubnode(Nid nid)
        {
            var block = _reader.FindBlock(_bid);

            var level = block.Data[1];

            if (level > 0)
            {
                var siEntry = FindIntermediateEntry(block, nid);
                if (siEntry == null)
                {
                    return(null);
                }

                block = _reader.FindBlock(siEntry.Bid);
            }

            var slEntry = FindLeafEntry(block, nid);

            if (slEntry == null)
            {
                return(null);
            }

            return(new Node(nid, slEntry.DataBid, slEntry.SubnodeBid, _reader));
        }
Example #3
0
        internal Node FindSubnode(Nid subnodeNid)
        {
            if (SubnodeBid == 0)
                throw new Exception("No subnode block found for this node.");

            var subnode = new SubnodeReader(SubnodeBid, _reader);
            return subnode.FindSubnode(subnodeNid);
        }
Example #4
0
        public Node FindNode(Nid nid)
        {
            var entry = _nbtReader.Find(nid);
            if (entry == null)
                return null;

            return new Node(entry.Nid, entry.DataBid, entry.SubnodeBid, this);
        }
Example #5
0
        internal Node FindSubnode(Nid subnodeNid)
        {
            if (SubnodeBid == 0)
            {
                throw new Exception("No subnode block found for this node.");
            }

            return(_subnodeReader.FindSubnode(subnodeNid));
        }
Example #6
0
        internal Node(Nid nid, Bid dataBid, Bid subnodeBid, IPstReader reader)
        {
            Nid        = nid;
            DataBid    = dataBid;
            SubnodeBid = subnodeBid;

            _reader = reader;
            if (SubnodeBid != 0)
            {
                _subnodeReader = new SubnodeReader(SubnodeBid, reader);
            }
        }
Example #7
0
        private SiEntry FindIntermediateEntry(Block block, Nid nid)
        {
            var numEntries = BitConverter.ToUInt16(block.Data, 2);

            for (int i = 0; i < numEntries; i++)
            {
                var entryNid = BitConverter.ToUInt32(block.Data, 8 + i * 16);
                if (entryNid > nid)
                {
                    return new SiEntry
                    {
                        Nid = BitConverter.ToUInt32(block.Data, 8 + (i - 1) * 16),
                        Bid = BitConverter.ToUInt64(block.Data, 16 + (i - 1) * 16)
                    };
                }
            }

            return null;
        }
Example #8
0
        private SiEntry FindIntermediateEntry(Block block, Nid nid)
        {
            var numEntries = BitConverter.ToUInt16(block.Data, 2);

            for (var i = 0; i < numEntries; i++)
            {
                var entryNid = BitConverter.ToUInt32(block.Data, 8 + i * 16);
                if (entryNid > nid)
                {
                    return(new SiEntry
                    {
                        Nid = BitConverter.ToUInt32(block.Data, 8 + (i - 1) * 16),
                        Bid = BitConverter.ToUInt64(block.Data, 16 + (i - 1) * 16)
                    });
                }
            }

            return(null);
        }
Example #9
0
        private SlEntry FindLeafEntry(Block block, Nid nid)
        {
            var numEntries = BitConverter.ToUInt16(block.Data, 2);

            for (int i = 0; i < numEntries; i++)
            {
                var entryNid = BitConverter.ToUInt32(block.Data, 8 + i * 24);
                if (entryNid == nid)
                {
                    return new SlEntry
                    {
                        Nid = BitConverter.ToUInt32(block.Data, 8 + i * 24),
                        DataBid = BitConverter.ToUInt64(block.Data, 16 + i * 24),
                        SubnodeBid = BitConverter.ToUInt64(block.Data, 24 + i * 24)
                    };
                }
            }

            return null;
        }
Example #10
0
        internal Node FindSubnode(Nid nid)
        {
            var block = _reader.FindBlock(_bid);

            var level = block.Data[1];
            if (level > 0)
            {
                var siEntry = FindIntermediateEntry(block, nid);
                if (siEntry == null)
                    return null;

                block = _reader.FindBlock(siEntry.Bid);
            }

            var slEntry = FindLeafEntry(block, nid);
            if (slEntry == null)
                return null;

            return new Node(nid, slEntry.DataBid, slEntry.SubnodeBid, _reader);
        }
Example #11
0
        private SlEntry FindLeafEntry(Block block, Nid nid)
        {
            var numEntries = BitConverter.ToUInt16(block.Data, 2);

            for (var i = 0; i < numEntries; i++)
            {
                var entryNid = BitConverter.ToUInt32(block.Data, 8 + i * 24);
                if (entryNid == nid)
                {
                    return(new SlEntry
                    {
                        Nid = BitConverter.ToUInt32(block.Data, 8 + i * 24),
                        DataBid = BitConverter.ToUInt64(block.Data, 16 + i * 24),
                        SubnodeBid = BitConverter.ToUInt64(block.Data, 24 + i * 24)
                    });
                }
            }

            return(null);
        }
Example #12
0
 internal Folder(Nid nid, IPstReader reader)
 {
     _nid = nid;
     _pstReader = reader;
     Initialize();
 }
Example #13
0
 internal MessageStore(Nid nid, IPstReader reader)
 {
     _nid = nid;
     _pstReader = reader;
     Initialize();
 }
Example #14
0
 internal static Nid ChangeType(Nid nid, NidType type) => new Nid(type, nid.Index);
Example #15
0
 internal static Nid ChangeType(Nid nid, NidType type)
 {
     return new Nid(type, nid.Index);
 }