Обратный индекс объектов страниц
HotPDF ведёт локальный для документа обратный индекс, который сопоставляет идентификатор объекта страницы с позицией страницы (нумерация с нуля)
Поведение поиска
Метод GetPageArrIndexForObjectNumber принимает номер PDF-объекта, а GetPageArrIndexForObject — разрешённый объект страницы или THPDFLink
Оба метода возвращают -1, если значение не идентифицирует страницу текущего документа
Если повреждённые данные приводят к появлению одного и того же идентификатора несколько раз, детерминированно побеждает первая страница в порядке документа
Построение и инвалидация
Индекс строится лениво при первом поиске и использует отдельные хеш-таблицы с открытой адресацией для номеров объектов и разрешённых указателей на объекты
Загрузка, сброс, добавление, удаление, копирование, замена, перемещение, обращение порядка, перестановка, переупорядочивание и согласование страниц инвалидируют эти таблицы
При следующем поиске обе таблицы перестраиваются по текущему порядку страниц, поэтому в стоимость мутаций не входит упреждающее перестроение индекса
Производительность и владение
Таблицы удерживают коэффициент заполнения ниже одной второй и дают поиск за ожидаемое константное время после построения за O(page count)
Регрессионная проверка выполняет миллион поисков после мутации в таблице на 100,000 страниц и требует задержки p95 ниже 5 микросекунд на обеих поддерживаемых Windows-платформах
Индекс хранит невладеющие указатели на объекты и освобождается вместе со своим экземпляром THotPDF
Не изменяйте экземпляр THotPDF параллельно с поиском страниц: сериализация изменений графа загруженного документа остаётся задачей вызывающей стороны
См. также: GetPageArrIndexForObjectNumber, GetPageArrIndexForObject, GetPageReverseIndexStatistics