aboutsummaryrefslogtreecommitdiffstats
path: root/include/qpdf
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2017-08-22 03:33:52 +0200
committerJay Berkenbilt <ejb@ql.org>2017-08-22 04:04:07 +0200
commitce435222b2ae95645a1a0f79a8b1fca443ed3724 (patch)
tree5ddcc7be12de8ea00a301a83f82bbc4955e03868 /include/qpdf
parenta8c93bd324d0362a26c1e6591eead5c52f865c0d (diff)
downloadqpdf-ce435222b2ae95645a1a0f79a8b1fca443ed3724.tar.zst
Push QPDFWriter member variables into a nested class
Diffstat (limited to 'include/qpdf')
-rw-r--r--include/qpdf/QPDFWriter.hh148
1 files changed, 82 insertions, 66 deletions
diff --git a/include/qpdf/QPDFWriter.hh b/include/qpdf/QPDFWriter.hh
index bca9c168..6114669c 100644
--- a/include/qpdf/QPDFWriter.hh
+++ b/include/qpdf/QPDFWriter.hh
@@ -374,7 +374,6 @@ class QPDFWriter
enum trailer_e { t_normal, t_lin_first, t_lin_second };
- void init();
int bytesNeeded(unsigned long long n);
void writeBinary(unsigned long long val, unsigned int bytes);
void writeString(std::string const& str);
@@ -483,71 +482,88 @@ class QPDFWriter
void discardGeneration(std::map<QPDFObjGen, int> const& in,
std::map<int, int>& out);
- QPDF& pdf;
- char const* filename;
- FILE* file;
- bool close_file;
- Pl_Buffer* buffer_pipeline;
- Buffer* output_buffer;
- bool normalize_content_set;
- bool normalize_content;
- bool compress_streams;
- bool compress_streams_set;
- qpdf_stream_decode_level_e stream_decode_level;
- bool stream_decode_level_set;
- bool qdf_mode;
- bool preserve_unreferenced_objects;
- bool newline_before_endstream;
- bool static_id;
- bool suppress_original_object_ids;
- bool direct_stream_lengths;
- bool encrypted;
- bool preserve_encryption;
- bool linearized;
- bool pclm;
- qpdf_object_stream_e object_stream_mode;
- std::string encryption_key;
- bool encrypt_metadata;
- bool encrypt_use_aes;
- std::map<std::string, std::string> encryption_dictionary;
- int encryption_V;
- int encryption_R;
-
- std::string id1; // for /ID key of
- std::string id2; // trailer dictionary
- std::string final_pdf_version;
- int final_extension_level;
- std::string min_pdf_version;
- int min_extension_level;
- std::string forced_pdf_version;
- int forced_extension_level;
- std::string extra_header_text;
- int encryption_dict_objid;
- std::string cur_data_key;
- std::list<PointerHolder<Pipeline> > to_delete;
- Pl_Count* pipeline;
- std::list<QPDFObjectHandle> object_queue;
- std::map<QPDFObjGen, int> obj_renumber;
- std::map<int, QPDFXRefEntry> xref;
- std::map<int, qpdf_offset_t> lengths;
- int next_objid;
- int cur_stream_length_id;
- size_t cur_stream_length;
- bool added_newline;
- int max_ostream_index;
- std::set<QPDFObjGen> normalized_streams;
- std::map<QPDFObjGen, int> page_object_to_seq;
- std::map<QPDFObjGen, int> contents_to_page_seq;
- std::map<QPDFObjGen, int> object_to_object_stream;
- std::map<int, std::set<QPDFObjGen> > object_stream_to_objects;
- std::list<Pipeline*> pipeline_stack;
- bool deterministic_id;
- Pl_MD5* md5_pipeline;
- std::string deterministic_id_data;
-
- // For linearization only
- std::map<int, int> obj_renumber_no_gen;
- std::map<int, int> object_to_object_stream_no_gen;
+ class Members
+ {
+ friend class QPDFWriter;
+
+ public:
+ ~Members();
+
+ private:
+ Members(QPDF& pdf);
+ Members(Members const&);
+
+ QPDF& pdf;
+ char const* filename;
+ FILE* file;
+ bool close_file;
+ Pl_Buffer* buffer_pipeline;
+ Buffer* output_buffer;
+ bool normalize_content_set;
+ bool normalize_content;
+ bool compress_streams;
+ bool compress_streams_set;
+ qpdf_stream_decode_level_e stream_decode_level;
+ bool stream_decode_level_set;
+ bool qdf_mode;
+ bool preserve_unreferenced_objects;
+ bool newline_before_endstream;
+ bool static_id;
+ bool suppress_original_object_ids;
+ bool direct_stream_lengths;
+ bool encrypted;
+ bool preserve_encryption;
+ bool linearized;
+ bool pclm;
+ qpdf_object_stream_e object_stream_mode;
+ std::string encryption_key;
+ bool encrypt_metadata;
+ bool encrypt_use_aes;
+ std::map<std::string, std::string> encryption_dictionary;
+ int encryption_V;
+ int encryption_R;
+
+ std::string id1; // for /ID key of
+ std::string id2; // trailer dictionary
+ std::string final_pdf_version;
+ int final_extension_level;
+ std::string min_pdf_version;
+ int min_extension_level;
+ std::string forced_pdf_version;
+ int forced_extension_level;
+ std::string extra_header_text;
+ int encryption_dict_objid;
+ std::string cur_data_key;
+ std::list<PointerHolder<Pipeline> > to_delete;
+ Pl_Count* pipeline;
+ std::list<QPDFObjectHandle> object_queue;
+ std::map<QPDFObjGen, int> obj_renumber;
+ std::map<int, QPDFXRefEntry> xref;
+ std::map<int, qpdf_offset_t> lengths;
+ int next_objid;
+ int cur_stream_length_id;
+ size_t cur_stream_length;
+ bool added_newline;
+ int max_ostream_index;
+ std::set<QPDFObjGen> normalized_streams;
+ std::map<QPDFObjGen, int> page_object_to_seq;
+ std::map<QPDFObjGen, int> contents_to_page_seq;
+ std::map<QPDFObjGen, int> object_to_object_stream;
+ std::map<int, std::set<QPDFObjGen> > object_stream_to_objects;
+ std::list<Pipeline*> pipeline_stack;
+ bool deterministic_id;
+ Pl_MD5* md5_pipeline;
+ std::string deterministic_id_data;
+
+ // For linearization only
+ std::map<int, int> obj_renumber_no_gen;
+ std::map<int, int> object_to_object_stream_no_gen;
+ };
+
+ // Keep all member variables inside the Members object, which we
+ // dynamically allocate. This makes it possible to add new private
+ // members without breaking binary compatibility.
+ PointerHolder<Members> m;
};
#endif // __QPDFWRITER_HH__