Headless Cross References
HPDFHeadlessXRef supplies the validated xref-stream and object-stream indexing used by THPDFHeadlessDocument; dictionaries and object-stream headers use the shared object parser, while big-endian fields use the shared Direct File byte reader
HPDFHeadlessDecodeXRefRows(Dictionary, DecodedBytes, MaxObjects, CancellationToken) reads direct Type, Size, W, and optional Index entries after the caller has decoded filters and predictors
THPDFHeadlessXRefRows is an array of THPDFHeadlessXRefRow records containing ObjectNumber and the shared THPDFDirectXrefEntry as Entry; entry kinds zero, one, and two identify free, direct, and compressed objects
Widths range from zero through eight bytes, omitted fields use PDF defaults, offsets retain Int64 precision, and subsection overlaps, payload-length mismatches, out-of-range generations, and unsigned overflow are rejected before indexing objects
HPDFHeadlessReadObjectStreamIndex(Dictionary, DecodedBytes, MaxObjects, MaxDecodedBytes, CancellationToken) validates direct Type=ObjStm, N, and First, then parses the numeric header through the shared parser
THPDFHeadlessObjectStreamMembers is an array of THPDFHeadlessObjectStreamMember records with ObjectNumber, zero-based decoded-payload Offset, and positive Length; duplicate object numbers, noninteger pairs, invalid offsets, and configured budgets are rejected
HPDFHeadlessObjectStreamBody(Members, DecodedBytes, MemberIndex, ExpectedObjectNumber) returns the exact member slice after checking the authoritative xref member number against its container header; the document caller parses that slice through the shared parser
EHPDFHeadlessXRefError reports a message and read-only LimitExceeded flag, while cancellation raises EHPDFOperationCancelled; callers own dictionaries and decoded buffers, and returned arrays contain value records
The provider handles byte indexing and validation; revision precedence, hybrid side-section merging, filter decoding, decryption, object caching, and document ownership remain with the document loader
Exact numeric values
The shared parser retains the original source token when conversion to Single would round the value or its magnitude exceeds 16777216; cross-reference and object-stream integer readers prefer that token for exact Int64 offsets and indices, while small exact integers retain the allocation-efficient path
Tests use the shared writer and independent compressed-object PDFs, cover 40-bit offsets, widths/defaults, predictors, sparse ranges, hybrid precedence, malformed member indices and revision cycles, and preserve the original parser allocation and throughput thresholds