private returnType FindAndCopyMarks(PdfArray pages, int arrayNumber, int newArrayNumber)
{
if (pages.GetAsNumber(0).IntValue > arrayNumber)
return returnType.BELOW;
if (pages.GetAsNumber(pages.Size - 2).IntValue < arrayNumber)
return returnType.ABOVE;
int cur = pages.Size/4;
int begin = 0;
int curNumber;
while (true) {
curNumber = pages.GetAsNumber((begin + cur) * 2).IntValue;
if (curNumber == arrayNumber) {
PdfObject res = writer.CopyObject(pages[((begin + cur) * 2 + 1)], true, false);
if (!(res is PdfIndirectReference))
res = writer.AddToBody(res).IndirectReference;
structureTreeRoot.AddPageMark(newArrayNumber, (PdfIndirectReference)res);
AddKid(structureTreeRoot, res);
return returnType.FOUND;
}
if (curNumber < arrayNumber) {
begin += cur;
cur /= 2;
if (cur == 0)
cur = 1;
if (cur + begin == pages.Size)
return returnType.NOTFOUND;
continue;
}
if (cur + begin == 0)
return returnType.BELOW;
if (cur == 0)
return returnType.NOTFOUND;
cur /= 2;
}
}