diff options
Diffstat (limited to 'Build/source/libs/pplib/pplib-src/src/ppxref.h')
-rw-r--r-- | Build/source/libs/pplib/pplib-src/src/ppxref.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/Build/source/libs/pplib/pplib-src/src/ppxref.h b/Build/source/libs/pplib/pplib-src/src/ppxref.h new file mode 100644 index 00000000000..fbb83beced6 --- /dev/null +++ b/Build/source/libs/pplib/pplib-src/src/ppxref.h @@ -0,0 +1,35 @@ + +#ifndef PP_XREF_H +#define PP_XREF_H + +/* +What we call xref is actually "xref section" in PDF spec and what we call section is "xref subsection". +Our ppxref is a list of sections, sorted by xrefsection->first and xrefsection->last bounds. Every section +keeps a list of ppref *refs, enumerated from xrefsection->first to xrefsection->last. To find a reference +by number we make a binary search over sections bounds, then jump to the proper ppref *ref. +*/ + +typedef struct { + ppuint first; // first reference number in section + ppuint last; // last reference number in section + ppref *refs; // references list +} ppxsec; + +struct ppxref { + ppxsec *sects; // subsections list + size_t size; // actual sections size + size_t space; // available sections space + ppobj trailer; // trailer dict or stream + ppuint count; // count of references in all sections + ppxref *prev; // previous xref + ppdoc *pdf; // parent pdf to access entries in linearized docs + size_t offset; // file offset of xref + //ppcrypt *crypt; // per xref encryption state? +}; + +ppxref * ppxref_create (ppdoc *pdf, size_t initsize, size_t xrefoffset); +ppxsec * ppxref_push_section (ppxref *xref, ppheap *heap); +int ppxref_sort (ppxref *xref); +ppref * ppxref_find_local (ppxref *xref, ppuint refnumber); + +#endif
\ No newline at end of file |