static VectorOffset SetVector <T>(FlatBufferBuilder builder, OffsetArrayPool.Array <T> array) where T : class { for (int i = array.position - 1; i >= 0; --i) { builder.AddOffset(array.offsets[i].Value); } return(builder.EndVector()); }
static void OffsetArrayPoolTest() { var array = OffsetArrayPool.sArrays[typeof(PhoneNumber)]; int size = (OffsetArrayPool.maxSizePOT - OffsetArrayPool.minSizePOT + 1) * OffsetArrayPool.initialArraySize; Debug.Assert(array.Count == size); List <OffsetArrayPool.Array <PhoneNumber> > oalist = new List <OffsetArrayPool.Array <PhoneNumber> >(); OffsetArrayPool.Array <PhoneNumber> oa = OffsetArrayPool.Alloc <PhoneNumber>(1); oalist.Add(oa); Debug.Assert(oa.length == (1 << OffsetArrayPool.minSizePOT)); Debug.Assert(array.Count == size - oalist.Count); oa = OffsetArrayPool.Alloc <PhoneNumber>(1 << OffsetArrayPool.minSizePOT); oalist.Add(oa); Debug.Assert(oa.length == (1 << OffsetArrayPool.minSizePOT)); Debug.Assert(array.Count == size - oalist.Count); oa = OffsetArrayPool.Alloc <PhoneNumber>((1 << OffsetArrayPool.minSizePOT) + 1); oalist.Add(oa); Debug.Assert(oa.length == (1 << (OffsetArrayPool.minSizePOT + 1))); Debug.Assert(array.Count == size - oalist.Count); oa = OffsetArrayPool.Alloc <PhoneNumber>(1); oalist.Add(oa); Debug.Assert(oa.length == (1 << OffsetArrayPool.minSizePOT)); Debug.Assert(array.Count == size - oalist.Count + OffsetArrayPool.initialArraySize); for (int i = 0; i < oalist.Count; ++i) { oa = oalist[i]; OffsetArrayPool.Dealloc(ref oa); Debug.Assert(oa == null); } oalist.Clear(); Debug.Assert(array.Count == size + OffsetArrayPool.initialArraySize); Console.WriteLine("Array Pool Checked"); }