/// <summary> /// Creates block and reads its contents from index file /// </summary> /// <param name="offset">Offset of block in index file</param> /// <param name="length">Length of block in index file</param> /// <returns>New block instance</returns> /// <exception cref="IOException">not enough data in index file to fill the block</exception> public static T Read <T>(this IIndexFileBlockProvider blockProvider, long offset, int length) where T : ISerializableIndexData, new() { var result = new T(); blockProvider.Read(result, offset, length); return(result); }
/// <summary> /// Initializes new instance of <see cref="StorageFileReader"/> class. /// </summary> /// <param name="streamFactory"><see cref="IStreamFactory"/> object used to create file streams</param> /// <exception cref="ArgumentNullException">factory is null</exception> public BinaryStorageIndex(IIndexFileBlockProvider blockProvider) { this.blockProvider = blockProvider.ThrowIfNull(nameof(blockProvider)); if (blockProvider.Length == 0) { header = new IndexHeader(); blockProvider.Write(header, 0); } else { header = blockProvider.Read <IndexHeader>(0, IndexHeader.FullHeaderSize); } }
/// <summary> /// Creates <see cref="IBinaryStorageIndex"/> instance, responsible for providing record metadata by keys. /// </summary> /// <param name="blockProvider">The <see cref="IIndexFileBlockProvider"/> instance, used by <see cref="IBinaryStorageIndex"/> to access the index file</param> /// <returns>New <see cref="IBinaryStorageIndex"/> instance</returns> public IBinaryStorageIndex CreateBinaryStorageIndex(IIndexFileBlockProvider blockProvider) { return(new BinaryStorageIndex(blockProvider)); }