public async Task <ISequentialStore <T> > GetSequentialStore <T>(string entityName) { IEntityStore <byte[], T> underlyingStore = this.GetEntityStore <byte[], T>(entityName); ISequentialStore <T> sequentialStore = await SequentialStore <T> .Create(underlyingStore); return(sequentialStore); }
public static async Task <ISequentialStore <T> > Create(IEntityStore <byte[], T> entityStore, long defaultHeadOffset) { Preconditions.CheckNotNull(entityStore, nameof(entityStore)); Option <(byte[] key, T value)> firstEntry = await entityStore.GetFirstEntry(CancellationToken.None); Option <(byte[] key, T value)> lastEntry = await entityStore.GetLastEntry(CancellationToken.None); long MapLocalFunction((byte[] key, T) e) => StoreUtils.GetOffsetFromKey(e.key); long headOffset = firstEntry.Map(MapLocalFunction).GetOrElse(defaultHeadOffset); long tailOffset = lastEntry.Map(MapLocalFunction).GetOrElse(defaultHeadOffset - 1); var sequentialStore = new SequentialStore <T>(entityStore, headOffset, tailOffset); return(sequentialStore); }