private void InternalAdd(TKey key, StoreAddress <TKey> storeAddress) { MapKeyToStoreAddress = MapKeyToStoreAddress.AddOrUpdate(key, storeAddress, (token, old) => { Garbage += 1; return(storeAddress); }); }
private void InternalRemove(TKey key) { var res = MapKeyToStoreAddress.TryRemove(key); if (res.Item2 == false) { return; } MapKeyToStoreAddress = res.Item1; Garbage += 1; }
private ReadInfo <TKey> StoreRead(TKey key) { byte[] data; return(_store.Read(log => { var mk = MapKeyToStoreAddress.TryGetValue(key); if (!mk.Item1) { return null; } var address = mk.Item2; Guid eTag; data = ReadData(address.Position, address.Size, address.Key, out eTag); return new ReadInfo <TKey> { Address = new StoreAddress <TKey> { Key = address.Key, Size = address.Size, Position = address.Position }, GetData = delegate { Guid etag; var retval = data ?? (data = ReadData(address.Position, address.Size, address.Key, out etag)); return retval; }, ETag = eTag }; })); }