Обратный индекс объектов страниц

HotPDF ведёт локальный для документа обратный индекс, который сопоставляет идентификатор объекта страницы с позицией страницы (нумерация с нуля)

Поведение поиска

Метод GetPageArrIndexForObjectNumber принимает номер PDF-объекта, а GetPageArrIndexForObject — разрешённый объект страницы или THPDFLink

Оба метода возвращают -1, если значение не идентифицирует страницу текущего документа

Если повреждённые данные приводят к появлению одного и того же идентификатора несколько раз, детерминированно побеждает первая страница в порядке документа

Построение и инвалидация

Индекс строится лениво при первом поиске и использует отдельные хеш-таблицы с открытой адресацией для номеров объектов и разрешённых указателей на объекты

Загрузка, сброс, добавление, удаление, копирование, замена, перемещение, обращение порядка, перестановка, переупорядочивание и согласование страниц инвалидируют эти таблицы

При следующем поиске обе таблицы перестраиваются по текущему порядку страниц, поэтому в стоимость мутаций не входит упреждающее перестроение индекса

Производительность и владение

Таблицы удерживают коэффициент заполнения ниже одной второй и дают поиск за ожидаемое константное время после построения за O(page count)

Регрессионная проверка выполняет миллион поисков после мутации в таблице на 100,000 страниц и требует задержки p95 ниже 5 микросекунд на обеих поддерживаемых Windows-платформах

Индекс хранит невладеющие указатели на объекты и освобождается вместе со своим экземпляром THotPDF

Не изменяйте экземпляр THotPDF параллельно с поиском страниц: сериализация изменений графа загруженного документа остаётся задачей вызывающей стороны

См. также: GetPageArrIndexForObjectNumber, GetPageArrIndexForObject, GetPageReverseIndexStatistics