public GeneratorPosition GeneratorPositionFromIndex (int itemIndex)
{
if (itemIndex < 0) {
return new GeneratorPosition (-1, 0);
}
else if (RealizedElements.Contains (itemIndex)) {
return new GeneratorPosition (RealizedElements.IndexOf (itemIndex), 0);
}
else if (itemIndex > Owner.Items.Count) {
return new GeneratorPosition (-1, 0);
}
if (RealizedElements.Count == 0)
return new GeneratorPosition (-1, itemIndex + 1);
int index = -1;
for (int i = 0; i < RealizedElements.Count; i ++) {
if (RealizedElements [i] > itemIndex)
break;
index = i;
}
if (index == -1) {
return new GeneratorPosition (index, itemIndex + 1);
} else {
return new GeneratorPosition (index, itemIndex - RealizedElements [index]);
}
}