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));
                    }
                }
            }
Exemple #2
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));
 }