public IndexNode Search(Guid id) { // Take the root node from inital index page IndexNode rootIndexNode = IndexFactory.GetRootIndexNode(this); var indexNode = IndexFactory.BinarySearch(id, rootIndexNode, this); // Returns null with not found the record, return false if (indexNode == null || indexNode.IsDeleted) { return(null); } return(indexNode); }
// Implement file physic storage public void Write(EntryInfo entry, Stream stream) { // Take the first index page IndexNode rootIndexNode = IndexFactory.GetRootIndexNode(this); // Search and insert the index var indexNode = IndexFactory.BinaryInsert(entry, rootIndexNode, this); // In this moment, the index are ready and saved. I use to add the file DataFactory.InsertFile(indexNode, stream, this); // Update entry information with file length (I know file length only after read all) entry.FileLength = indexNode.FileLength; // Only after insert all stream file I confirm that index node is valid indexNode.IsDeleted = false; // Mask header as dirty for save on dispose Header.IsDirty = true; }