public Usage Count_Empty_Slots() { int invalid = 0; int valid = 0; int blockSize = _node_Factory.Size_In_Bytes(3); long position = Index_Stream.Position; Index_Stream.Seek(8, SeekOrigin.Begin); var buffer = new byte[blockSize]; while (Index_Stream.Read(buffer, 0, buffer.Length) > 0) { var node = _node_Factory.From_Bytes(buffer, 3); if (node.IsValid) { valid++; } else { invalid++; } } int used = valid * blockSize; int wasted = invalid * blockSize; Index_Stream.Seek(position, SeekOrigin.Begin); return(new Usage { Invalid = invalid, Valid = valid }); }
protected Node <T> Read_Node(long address) { var buffer = new byte[_block_Size]; Index_Stream.Seek(address, SeekOrigin.Begin); Index_Stream.Read(buffer, 0, buffer.Length); return(_node_Factory.From_Bytes(buffer, Order)); }
public void Mark_As_Invalid(Stream index, long block_Address) { Index_Stream.Seek(block_Address, SeekOrigin.Begin); Index_Stream.Write(BitConverter.GetBytes(-1), 0, 4); }