private int DeserializeItems(DiskBTreeNode node, Span <byte> buffer) { var itemLength = _serializer.MaxSerializedItemLength; for (var i = 0; i < node.N; i++) { node.Items[i] = _serializer.DeserializeItem(buffer.Slice(i * itemLength, itemLength)); } return(node.N * itemLength); }
private int SerializeChildren(DiskBTreeNode node, Span <byte> buffer) { if (node.IsLeaf) { return(0); } for (var i = 0; i < node.N + 1; i++) { var childNode = (DiskBTreeNode)node.Children[i]; BitConverter.TryWriteBytes(buffer.Slice(i * 8, 8), childNode?.Id ?? -1); } return((node.N + 1) * 8); }
private int DeserializeHeader(DiskBTreeNode node, Span <byte> buffer) { node.IsLeaf = (NodeType)buffer[0] switch { NodeType.NonLeaf => false, NodeType.Leaf => true, _ => ThrowCorruptedNode <bool>(node.Id) }; node.N = BitConverter.ToInt32(buffer.Slice(1, 4)); if (node.N < 0 || node.N > MaxItemsCount) { ThrowCorruptedNode <bool>(node.Id); } return(5); }
private int DeserializeChildren(DiskBTreeNode node, Span <byte> buffer) { if (node.IsLeaf) { return(0); } for (var i = 0; i < node.N + 1; i++) { var id = BitConverter.ToInt64(buffer.Slice(i * 8, 8)); if (id >= 0) { var childNode = (DiskBTreeNode)AllocateNode(); node.Children[i] = childNode; childNode.Id = id; } } return((node.N + 1) * 8); }
private int SerializeHeader(DiskBTreeNode node, Span <byte> buffer) { buffer[0] = (byte)(node.IsLeaf ? NodeType.Leaf : NodeType.NonLeaf); BitConverter.TryWriteBytes(buffer.Slice(1, 4), node.N); return(5); }