Exemplo n.º 1
0
            T LoadNoKey(KeyNode <K> i)
            {
                var item = _ctor();

                _metadata.Deserialize(_reader.ReadData(i.Offset, i.Length), item);
                return(item);
            }
Exemplo n.º 2
0
        static void MakeMap(Dictionary <long, IKeyNode> result, KeyNode <K> node)
        {
            if (node == null)
            {
                return;
            }

            result[node.Offset] = node;

            MakeMap(result, node.Left);
            MakeMap(result, node.Right);
        }
Exemplo n.º 3
0
        static void WriteNode(DataWriter writer, KeyNode <K> node)
        {
            if (node != null)
            {
                writer.Write((sbyte)node.Color);
                writer.Write(node.Length);
                writer.Write(node.Offset);

                _serializer(writer, node.Key);

                WriteNode(writer, node.Left);
                WriteNode(writer, node.Right);
            }
            else
            {
                writer.Write((sbyte)-1);
            }
        }
Exemplo n.º 4
0
        Location <T> GetLocation(KeyNode <K> node, bool provision)
        {
            var result = new Location <T>
            {
                Offset = node.Offset,
                Length = node.Length
            };

            if (provision)
            {
                result.Result = _table.Ctor();

                if (_setter != null)
                {
                    _setter(result.Result, node.Key);
                }
            }

            return(result);
        }
Exemplo n.º 5
0
        static KeyNode <K> ReadNode(DataReader reader, KeyNode <K> parent)
        {
            var color = reader.ReadSByte();

            if (color == -1)
            {
                return(null);
            }

            var length = reader.ReadInt32();
            var offset = reader.ReadInt64();
            var key    = _deserializer(reader);

            var result = _ctor();

            result.Key    = key;
            result.Color  = (RBTreeColor)color;
            result.Length = length;
            result.Offset = offset;
            result.Parent = parent;
            result.Left   = ReadNode(reader, result);
            result.Right  = ReadNode(reader, result);
            return(result);
        }