public int Select(int j)
{
int leftover = j;
for (int i = 0; i < this.containers.Size; i++)
{
Container c = this.containers.GetContainerAtIndex(i);
int thisCardinality = c.GetCardinality();
if (thisCardinality > leftover)
{
uint keycontrib = (uint) this.containers.GetKeyAtIndex(i) << 16;
uint lowcontrib = (uint) c.Select(leftover);
return (int) (lowcontrib + keycontrib);
}
leftover -= thisCardinality;
}
throw new ArgumentOutOfRangeException("select " + j + " when the cardinality is " + this.Cardinality());
}