T LoadNoKey(KeyNode <K> i) { var item = _ctor(); _metadata.Deserialize(_reader.ReadData(i.Offset, i.Length), item); return(item); }
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); }
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); } }
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); }
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); }