void InitBufWithSubpage(PooledArrayBuffer <T> buf, long handle, int bitmapIdx, int reqCapacity) { Contract.Assert(bitmapIdx != 0); int memoryMapIdx = MemoryMapIdx(handle); PoolSubpage <T> subpage = this.subpages[this.SubpageIdx(memoryMapIdx)]; Contract.Assert(subpage.DoNotDestroy); Contract.Assert(reqCapacity <= subpage.ElemSize); buf.Init( this, handle, this.RunOffset(memoryMapIdx) + (bitmapIdx & 0x3FFFFFFF) * subpage.ElemSize, reqCapacity, subpage.ElemSize, this.Arena.Parent.ThreadCache()); }
internal void InitBuf(PooledArrayBuffer <T> buf, long handle, int reqCapacity) { int memoryMapIdx = MemoryMapIdx(handle); int bitmapIdx = BitmapIdx(handle); if (bitmapIdx == 0) { sbyte val = this.Value(memoryMapIdx); Contract.Assert(val == this.unusable, val.ToString()); buf.Init(this, handle, this.RunOffset(memoryMapIdx), reqCapacity, this.RunLength(memoryMapIdx), this.Arena.Parent.ThreadCache()); } else { this.InitBufWithSubpage(buf, handle, bitmapIdx, reqCapacity); } }