Example #1
0
 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;
 }
Example #2
0
		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;
		}
Example #3
0
        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));
        }
Example #4
0
        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);
        }
Example #5
0
		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);
		}
Example #6
0
        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));
        }