internal async Task SetupLevelsAsync(IFdbTransaction trans) { var ks = Enumerable.Range(0, MAX_LEVELS) .Select((l) => this.Subspace.Encode(l, Slice.Empty)) .ToList(); var res = await trans.GetValuesAsync(ks).ConfigureAwait(false); for (int l = 0; l < res.Length; l++) { if (res[l].IsNull) { trans.Set(ks[l], EncodeCount(0)); } } }
/// <summary>Swap the items at positions i1 and i2.</summary> public async Task SwapAsync([NotNull] IFdbTransaction tr, long index1, long index2) { if (tr == null) { throw new ArgumentNullException("tr"); } if (index1 < 0 || index2 < 0) { throw new IndexOutOfRangeException(String.Format("Indices ({0}, {1}) must be positive", index1, index2)); } var k1 = GetKeyAt(index1); var k2 = GetKeyAt(index2); long currentSize = await ComputeSizeAsync(tr).ConfigureAwait(false); if (index1 >= currentSize || index2 >= currentSize) { throw new IndexOutOfRangeException(String.Format("Indices ({0}, {1}) are out of range", index1, index2)); } var vs = await tr.GetValuesAsync(new[] { k1, k2 }).ConfigureAwait(false); var v1 = vs[0]; var v2 = vs[1]; if (!v2.IsNullOrEmpty) { tr.Set(k1, v2); } else if (v1.IsPresent && index1 < currentSize - 1) { tr.Clear(k1); } if (!v1.IsNullOrEmpty) { tr.Set(k2, v1); } else if (v2.IsPresent && index2 < currentSize - 1) { tr.Clear(k2); } }
private async Task SetupLevelsAsync(IFdbTransaction trans) { var ks = Enumerable.Range(0, MAX_LEVELS) .Select((l) => this.Subspace.Pack(l, Slice.Empty)) .ToList(); var res = await trans.GetValuesAsync(ks).ConfigureAwait(false); for (int l = 0; l < res.Length; l++) { //Console.WriteLine(ks[l]); if (res[l].IsNull) trans.Set(ks[l], EncodeCount(0)); } }
public virtual Task <Slice[]> GetValuesAsync(Slice[] keys) { ThrowIfDisposed(); return(m_transaction.GetValuesAsync(keys)); }