Index: src/pdf/SkPDFCatalog.h |
diff --git a/src/pdf/SkPDFCatalog.h b/src/pdf/SkPDFCatalog.h |
index 1bdac936d47c57cdf1112bfbcf22d447ba8c198c..54d08c5e24646c25f8d64067e733d6189f72f5de 100644 |
--- a/src/pdf/SkPDFCatalog.h |
+++ b/src/pdf/SkPDFCatalog.h |
@@ -10,99 +10,44 @@ |
#ifndef SkPDFCatalog_DEFINED |
#define SkPDFCatalog_DEFINED |
-#include <sys/types.h> |
- |
#include "SkPDFTypes.h" |
#include "SkTDArray.h" |
+#include "SkTHash.h" |
/** \class SkPDFCatalog |
- The PDF catalog manages object numbers and file offsets. It is used |
+ The PDF catalog manages object numbers. It is used |
to create the PDF cross reference table. |
*/ |
class SkPDFCatalog { |
public: |
- /** Create a PDF catalog. |
- */ |
SkPDFCatalog(); |
~SkPDFCatalog(); |
- /** Add the passed object to the catalog. Refs obj. |
+ /** Add the passed object to the catalog. |
* @param obj The object to add. |
- * @param onFirstPage Is the object on the first page. |
- * @return The obj argument is returned. |
+ * @return True iff the object was not already added to the catalog. |
*/ |
- SkPDFObject* addObject(SkPDFObject* obj, bool onFirstPage); |
- |
- /** Inform the catalog of the object's position in the final stream. |
- * The object should already have been added to the catalog. |
- * @param obj The object to add. |
- * @param offset The byte offset in the output stream of this object. |
- */ |
- void setFileOffset(SkPDFObject* obj, off_t offset); |
+ bool addObject(SkPDFObject* obj); |
/** Get the object number for the passed object. |
* @param obj The object of interest. |
*/ |
- int32_t getObjectNumber(SkPDFObject* obj); |
- |
- /** Output the cross reference table for objects in the catalog. |
- * Returns the total number of objects. |
- * @param stream The writable output stream to send the output to. |
- * @param firstPage If true, include first page objects only, otherwise |
- * include all objects not on the first page. |
- */ |
- int32_t emitXrefTable(SkWStream* stream, bool firstPage); |
+ int32_t getObjectNumber(SkPDFObject* obj) const; |
/** Set substitute object for the passed object. |
+ Refs substitute. |
*/ |
void setSubstitute(SkPDFObject* original, SkPDFObject* substitute); |
/** Find and return any substitute object set for the passed object. If |
* there is none, return the passed object. |
*/ |
- SkPDFObject* getSubstituteObject(SkPDFObject* object); |
+ SkPDFObject* getSubstituteObject(SkPDFObject* object) const; |
private: |
- struct Rec { |
- Rec(SkPDFObject* object, bool onFirstPage) |
- : fObject(object), |
- fFileOffset(0), |
- fObjNumAssigned(false), |
- fOnFirstPage(onFirstPage) { |
- } |
- SkPDFObject* fObject; |
- off_t fFileOffset; |
- bool fObjNumAssigned; |
- bool fOnFirstPage; |
- }; |
- |
- struct SubstituteMapping { |
- SubstituteMapping(SkPDFObject* original, SkPDFObject* substitute) |
- : fOriginal(original), fSubstitute(substitute) { |
- } |
- SkPDFObject* fOriginal; |
- SkPDFObject* fSubstitute; |
- }; |
- |
- // TODO(vandebo): Make this a hash if it's a performance problem. |
- SkTDArray<Rec> fCatalog; |
- |
- // TODO(arthurhsu): Make this a hash if it's a performance problem. |
- SkTDArray<SubstituteMapping> fSubstituteMap; |
- SkTSet<SkPDFObject*> fSubstituteResourcesFirstPage; |
- SkTSet<SkPDFObject*> fSubstituteResourcesRemaining; |
- |
- // Number of objects on the first page. |
- uint32_t fFirstPageCount; |
- // Next object number to assign (on page > 1). |
- uint32_t fNextObjNum; |
- // Next object number to assign on the first page. |
- uint32_t fNextFirstPageObjNum; |
- |
- int findObjectIndex(SkPDFObject* obj); |
- |
- int assignObjNum(SkPDFObject* obj); |
+ SkTHashMap<SkPDFObject*, int32_t> fObjectNumbers; |
+ SkTHashMap<SkPDFObject*, SkPDFObject*> fSubstituteMap; |
}; |
#endif |