示例#1
0
        /// <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);
     }
 }
示例#3
0
 /// <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));
 }