Sayfa-object ters indeksi

HotPDF, page object kimliğinden sıfır tabanlı sayfa konumuna giden belge-yerel bir ters indeks tutar

Arama davranışı

GetPageArrIndexForObjectNumber bir PDF object numarası kabul eder; GetPageArrIndexForObject ise çözülmüş bir page object veya bir THPDFLink kabul eder

Değer geçerli bir sayfayı tanımlamıyorsa her iki metot da -1 döndürür

Bozuk girdi aynı kimliği birden çok kez ortaya çıkarırsa, belge sırasındaki ilk sayfa deterministik olarak kazanır

İnşa ve geçersiz kılma

İndeks ilk aramada tembel olarak inşa edilir ve object numaraları ile çözülmüş object pointer'ları için ayrı open-addressed map'ler kullanır

Sayfaları yükleme, sıfırlama, ekleme, silme, kopyalama, değiştirme, taşıma, ters çevirme, takas etme, yeniden sıralama veya uzlaştırma map'leri geçersiz kılar

Sonraki arama, her iki map'i geçerli sayfa sırasından yeniden inşa eder; böylece değişiklik maliyeti hevesli bir indeks yeniden inşası içermez

Performans ve sahiplik

Map'ler load factor'lerini yarının altında tutar ve O(page count) inşasından sonra beklenen sabit zamanda arama sağlar

Bir regression gate'i, 100.000 sayfalık bir tabloda değişiklikten sonra bir milyon arama yapar ve desteklenen iki Windows hedefinde de 5 mikrosaniyenin altında p95 latency ister

İndeks, sahiplik taşımayan object pointer'ları saklar ve THotPDF örneğiyle birlikte serbest bırakılır

Bir THotPDF örneğini sayfa aramasıyla eşzamanlı olarak değiştirmeyin; çünkü yüklü belge graph değişikliği çağıran tarafından serileştirilmeye devam eder

Ayrıca bkz.: GetPageArrIndexForObjectNumber, GetPageArrIndexForObject, GetPageReverseIndexStatistics