public TreeNode(JToken key, StreamPosition left, StreamPosition right, long?value, Func <StreamPosition, TreeNode> readNode, Func <TreeNode, StreamPosition> writeNode) { NodeKey = key; Left = left; Right = right; NodeValue = value; this.readNode = readNode; this.writeNode = writeNode; }
private StreamPosition WriteNodeLazy(TreeNode arg) { if (arg == null) return null; var positionInFile = new StreamPosition(arg); unwritten.Add(new Tuple<StreamPosition, TreeNode>(positionInFile, arg)); return positionInFile; }
private TreeNode CreateOrAddNode(JToken key, long value, StreamPosition nodePos) { if (nodePos == null) { return(new TreeNode(key, null, null, value, readNode, writeNode)); } var node = readNode(nodePos); return(node.Add(key, value)); }
private StreamPosition WriteNodeLazy(TreeNode arg) { if (arg == null) { return(null); } var positionInFile = new StreamPosition(arg); unwritten.Add(new Tuple <StreamPosition, TreeNode>(positionInFile, arg)); return(positionInFile); }
private TreeNode ReadNode(StreamPosition streamPosition) { if (streamPosition.Node != null) return streamPosition.Node; if (streamPosition.Position == null) throw new InvalidOperationException("Cannot read an unwritten node"); reader.Position = streamPosition.Position.Value; return new TreeNode( ReadJToken(), ReadPositionInFile(), ReadPositionInFile(), binaryReader.ReadBitEncodedNullableInt64(), ReadNode, WriteNodeLazy); }
private TreeNode ReadNode(StreamPosition streamPosition) { if (streamPosition.Node != null) { return(streamPosition.Node); } if (streamPosition.Position == null) { throw new InvalidOperationException("Cannot read an unwritten node"); } reader.Position = streamPosition.Position.Value; return(new TreeNode( ReadJToken(), ReadPositionInFile(), ReadPositionInFile(), binaryReader.ReadBitEncodedNullableInt64(), ReadNode, WriteNodeLazy)); }