private ShortBuffer GetIdxBuffer(int size) { var roundedSize = Math.Max(MinBufferSize, Utils.NextPowerOfTwo(size)); var idx = MaxBufferSizeLog2 - Utils.Log2Int(roundedSize); var buffer = (ShortBuffer)null; if (freeIdxBuffers[idx].Count == 0) { buffer = ByteBuffer.AllocateDirect(sizeof(short) * roundedSize).Order(ByteOrder.NativeOrder()).AsShortBuffer(); } else { var lastIdx = freeIdxBuffers[idx].Count - 1; buffer = freeIdxBuffers[idx][lastIdx]; freeIdxBuffers[idx].RemoveAt(lastIdx); } usedIdxBuffers[idx].Add(buffer); buffer.Position(0); return(buffer); }