public void eachRange(Range r, Func f)
{
int s = r.start(m_size);
int e = r.end(m_size);
int n = e - s + 1;
if (n < 0)
{
throw IndexErr.make(r).val;
}
if (f.arity() == 1)
{
for (int i = s; i <= e; ++i)
{
f.call(m_values[i]);
}
}
else
{
for (int i = s; i <= e; ++i)
{
f.call(m_values[i], i);
}
}
}