Commit b66392653871f834d7b78aa423ca279e4828951a

Authored by Jay Berkenbilt
1 parent a47b9995

Remove QPDFObject::object_type_e as alias for qpdf_object_type_e

ChangeLog
1 2022-09-01 Jay Berkenbilt <ejb@ql.org> 1 2022-09-01 Jay Berkenbilt <ejb@ql.org>
2 2
  3 + * Remove QPDFObject.hh from include/qpdf. The only reason to
  4 + include was to get QPDFObject::object_type_e. Instead, include
  5 + qpdf/Constants.h, and change `QPDFObject::ot_` to `::ot_`.
  6 +
3 * More optimizations and cleanup from m-holger (#726, #730) 7 * More optimizations and cleanup from m-holger (#726, #730)
4 including major refactor of QPDF's internal representations of 8 including major refactor of QPDF's internal representations of
5 objects. In addition to a large performance improvement, this also 9 objects. In addition to a large performance improvement, this also
include/qpdf/Constants.h
@@ -61,9 +61,8 @@ enum qpdf_error_code_e { @@ -61,9 +61,8 @@ enum qpdf_error_code_e {
61 * may be added to the list, so code that switches on these values 61 * may be added to the list, so code that switches on these values
62 * should take that into consideration. (Maintainer note: it would be 62 * should take that into consideration. (Maintainer note: it would be
63 * better to call this qpdf_ot_* rather than ot_* to reduce likelihood 63 * better to call this qpdf_ot_* rather than ot_* to reduce likelihood
64 - * of name collision, but since QPDFObject::object_type_e is an alias  
65 - * to this type, changing the names of the values breaks backward  
66 - * compatibility.) 64 + * of name collision, but changing the names of the values breaks
  65 + * backward compatibility.)
67 */ 66 */
68 enum qpdf_object_type_e { 67 enum qpdf_object_type_e {
69 /* Object types internal to qpdf */ 68 /* Object types internal to qpdf */
@@ -84,7 +83,6 @@ enum qpdf_object_type_e { @@ -84,7 +83,6 @@ enum qpdf_object_type_e {
84 ot_inlineimage, 83 ot_inlineimage,
85 /* Object types internal to qpdf */ 84 /* Object types internal to qpdf */
86 ot_unresolved, 85 ot_unresolved,
87 - /* NOTE: if adding to this list, update QPDFObject.hh */  
88 }; 86 };
89 87
90 /* Write Parameters. See QPDFWriter.hh for details. */ 88 /* Write Parameters. See QPDFWriter.hh for details. */
include/qpdf/QPDFObject.hh
@@ -38,32 +38,6 @@ class QPDFObject @@ -38,32 +38,6 @@ class QPDFObject
38 friend class QPDFValue; 38 friend class QPDFValue;
39 39
40 public: 40 public:
41 - // Objects derived from QPDFObject are accessible through  
42 - // QPDFObjectHandle. Each object returns a unique type code that  
43 - // has one of the valid qpdf_object_type_e values. As new object  
44 - // types are added to qpdf, additional items may be added to the  
45 - // list, so code that switches on these values should take that  
46 - // into consideration.  
47 -  
48 - // Prior to qpdf 10.5, qpdf_object_type_e was  
49 - // QPDFObject::object_type_e but was moved to make it accessible  
50 - // to the C API. The code below is for backward compatibility.  
51 - typedef enum qpdf_object_type_e object_type_e;  
52 - static constexpr object_type_e ot_uninitialized = ::ot_uninitialized;  
53 - static constexpr object_type_e ot_reserved = ::ot_reserved;  
54 - static constexpr object_type_e ot_null = ::ot_null;  
55 - static constexpr object_type_e ot_boolean = ::ot_boolean;  
56 - static constexpr object_type_e ot_integer = ::ot_integer;  
57 - static constexpr object_type_e ot_real = ::ot_real;  
58 - static constexpr object_type_e ot_string = ::ot_string;  
59 - static constexpr object_type_e ot_name = ::ot_name;  
60 - static constexpr object_type_e ot_array = ::ot_array;  
61 - static constexpr object_type_e ot_dictionary = ::ot_dictionary;  
62 - static constexpr object_type_e ot_stream = ::ot_stream;  
63 - static constexpr object_type_e ot_operator = ::ot_operator;  
64 - static constexpr object_type_e ot_inlineimage = ::ot_inlineimage;  
65 - static constexpr object_type_e ot_unresolved = ::ot_unresolved;  
66 -  
67 QPDFObject() = default; 41 QPDFObject() = default;
68 virtual ~QPDFObject() = default; 42 virtual ~QPDFObject() = default;
69 43
@@ -84,7 +58,7 @@ class QPDFObject @@ -84,7 +58,7 @@ class QPDFObject
84 } 58 }
85 59
86 // Return a unique type code for the object 60 // Return a unique type code for the object
87 - object_type_e 61 + qpdf_object_type_e
88 getTypeCode() const 62 getTypeCode() const
89 { 63 {
90 return value->type_code; 64 return value->type_code;
include/qpdf/QPDFObjectHandle.hh
@@ -338,7 +338,7 @@ class QPDFObjectHandle @@ -338,7 +338,7 @@ class QPDFObjectHandle
338 // useful for doing rapid type tests (like switch statements) or 338 // useful for doing rapid type tests (like switch statements) or
339 // for testing and debugging. 339 // for testing and debugging.
340 QPDF_DLL 340 QPDF_DLL
341 - QPDFObject::object_type_e getTypeCode(); 341 + qpdf_object_type_e getTypeCode();
342 QPDF_DLL 342 QPDF_DLL
343 char const* getTypeName(); 343 char const* getTypeName();
344 344
libqpdf/QPDFObjectHandle.cc
@@ -251,11 +251,10 @@ QPDFObjectHandle::releaseResolved() @@ -251,11 +251,10 @@ QPDFObjectHandle::releaseResolved()
251 } 251 }
252 } 252 }
253 253
254 -QPDFObject::object_type_e 254 +qpdf_object_type_e
255 QPDFObjectHandle::getTypeCode() 255 QPDFObjectHandle::getTypeCode()
256 { 256 {
257 - return dereference() ? this->obj->getTypeCode()  
258 - : QPDFObject::ot_uninitialized; 257 + return dereference() ? this->obj->getTypeCode() : ::ot_uninitialized;
259 } 258 }
260 259
261 char const* 260 char const*
@@ -347,7 +346,7 @@ QPDFObjectHandle::asString() @@ -347,7 +346,7 @@ QPDFObjectHandle::asString()
347 bool 346 bool
348 QPDFObjectHandle::isBool() 347 QPDFObjectHandle::isBool()
349 { 348 {
350 - return dereference() && (obj->getTypeCode() == QPDFObject::ot_boolean); 349 + return dereference() && (obj->getTypeCode() == ::ot_boolean);
351 } 350 }
352 351
353 bool 352 bool
@@ -357,25 +356,25 @@ QPDFObjectHandle::isDirectNull() const @@ -357,25 +356,25 @@ QPDFObjectHandle::isDirectNull() const
357 // objid == 0, so there's nothing to resolve. 356 // objid == 0, so there's nothing to resolve.
358 return ( 357 return (
359 isInitialized() && (getObjectID() == 0) && 358 isInitialized() && (getObjectID() == 0) &&
360 - (obj->getTypeCode() == QPDFObject::ot_null)); 359 + (obj->getTypeCode() == ::ot_null));
361 } 360 }
362 361
363 bool 362 bool
364 QPDFObjectHandle::isNull() 363 QPDFObjectHandle::isNull()
365 { 364 {
366 - return dereference() && (obj->getTypeCode() == QPDFObject::ot_null); 365 + return dereference() && (obj->getTypeCode() == ::ot_null);
367 } 366 }
368 367
369 bool 368 bool
370 QPDFObjectHandle::isInteger() 369 QPDFObjectHandle::isInteger()
371 { 370 {
372 - return dereference() && (obj->getTypeCode() == QPDFObject::ot_integer); 371 + return dereference() && (obj->getTypeCode() == ::ot_integer);
373 } 372 }
374 373
375 bool 374 bool
376 QPDFObjectHandle::isReal() 375 QPDFObjectHandle::isReal()
377 { 376 {
378 - return dereference() && (obj->getTypeCode() == QPDFObject::ot_real); 377 + return dereference() && (obj->getTypeCode() == ::ot_real);
379 } 378 }
380 379
381 bool 380 bool
@@ -412,49 +411,49 @@ QPDFObjectHandle::getValueAsNumber(double&amp; value) @@ -412,49 +411,49 @@ QPDFObjectHandle::getValueAsNumber(double&amp; value)
412 bool 411 bool
413 QPDFObjectHandle::isName() 412 QPDFObjectHandle::isName()
414 { 413 {
415 - return dereference() && (obj->getTypeCode() == QPDFObject::ot_name); 414 + return dereference() && (obj->getTypeCode() == ::ot_name);
416 } 415 }
417 416
418 bool 417 bool
419 QPDFObjectHandle::isString() 418 QPDFObjectHandle::isString()
420 { 419 {
421 - return dereference() && (obj->getTypeCode() == QPDFObject::ot_string); 420 + return dereference() && (obj->getTypeCode() == ::ot_string);
422 } 421 }
423 422
424 bool 423 bool
425 QPDFObjectHandle::isOperator() 424 QPDFObjectHandle::isOperator()
426 { 425 {
427 - return dereference() && (obj->getTypeCode() == QPDFObject::ot_operator); 426 + return dereference() && (obj->getTypeCode() == ::ot_operator);
428 } 427 }
429 428
430 bool 429 bool
431 QPDFObjectHandle::isInlineImage() 430 QPDFObjectHandle::isInlineImage()
432 { 431 {
433 - return dereference() && (obj->getTypeCode() == QPDFObject::ot_inlineimage); 432 + return dereference() && (obj->getTypeCode() == ::ot_inlineimage);
434 } 433 }
435 434
436 bool 435 bool
437 QPDFObjectHandle::isArray() 436 QPDFObjectHandle::isArray()
438 { 437 {
439 - return dereference() && (obj->getTypeCode() == QPDFObject::ot_array); 438 + return dereference() && (obj->getTypeCode() == ::ot_array);
440 } 439 }
441 440
442 bool 441 bool
443 QPDFObjectHandle::isDictionary() 442 QPDFObjectHandle::isDictionary()
444 { 443 {
445 - return dereference() && (obj->getTypeCode() == QPDFObject::ot_dictionary); 444 + return dereference() && (obj->getTypeCode() == ::ot_dictionary);
446 } 445 }
447 446
448 bool 447 bool
449 QPDFObjectHandle::isStream() 448 QPDFObjectHandle::isStream()
450 { 449 {
451 - return dereference() && (obj->getTypeCode() == QPDFObject::ot_stream); 450 + return dereference() && (obj->getTypeCode() == ::ot_stream);
452 } 451 }
453 452
454 bool 453 bool
455 QPDFObjectHandle::isReserved() 454 QPDFObjectHandle::isReserved()
456 { 455 {
457 - return dereference() && (obj->getTypeCode() == QPDFObject::ot_reserved); 456 + return dereference() && (obj->getTypeCode() == ::ot_reserved);
458 } 457 }
459 458
460 bool 459 bool
manual/release-notes.rst
@@ -95,6 +95,18 @@ For a detailed list of changes, please see the file @@ -95,6 +95,18 @@ For a detailed list of changes, please see the file
95 95
96 - API: breaking changes 96 - API: breaking changes
97 97
  98 + - Remove ``QPDFObject.hh`` from the public ``include/qpdf``
  99 + directory. The only use case for including
  100 + ``qpdf/QPDFObject.hh`` was to get ``QPDFObject::object_type_e``.
  101 + Since 10.5.0, this has been an alias to ``qpdf_object_type_e``,
  102 + defined in ``qpdf/Constants.h``. To fix your code, replace any
  103 + includes of ``qpdf/QPDFObject.hh`` with ``qpdf/Constants.h``,
  104 + and replace all occurrences of ``QPDFObject::ot_`` with
  105 + ``::ot_``. If you need your code to be backward compatible to
  106 + qpdf versions prior to 10.5.0, you can check that the
  107 + preprocessor symbol ``QPDF_MAJOR_VERSION`` is defined and ``>=
  108 + 11``.
  109 +
98 - Pipeline::write now takes ``unsigned char const*`` instead of 110 - Pipeline::write now takes ``unsigned char const*`` instead of
99 ``unsigned char*``. Callers don't need to change anything, but 111 ``unsigned char*``. Callers don't need to change anything, but
100 you no longer have to pass writable pointers to pipelines. If 112 you no longer have to pass writable pointers to pipelines. If
qpdf/test_driver.cc
@@ -103,7 +103,7 @@ ParserCallbacks::handleObject( @@ -103,7 +103,7 @@ ParserCallbacks::handleObject(
103 << ", length=" << length << ": "; 103 << ", length=" << length << ": ";
104 if (obj.isInlineImage()) { 104 if (obj.isInlineImage()) {
105 // Exercise getTypeCode 105 // Exercise getTypeCode
106 - assert(obj.getTypeCode() == QPDFObject::ot_inlineimage); 106 + assert(obj.getTypeCode() == ::ot_inlineimage);
107 std::cout << QUtil::hex_encode(obj.getInlineImageValue()) << std::endl; 107 std::cout << QUtil::hex_encode(obj.getInlineImageValue()) << std::endl;
108 } else { 108 } else {
109 std::cout << obj.unparse() << std::endl; 109 std::cout << obj.unparse() << std::endl;
@@ -3296,7 +3296,7 @@ runtest(int n, char const* filename1, char const* arg2) @@ -3296,7 +3296,7 @@ runtest(int n, char const* filename1, char const* arg2)
3296 assert(password == "1234567890123456789012(45678"); 3296 assert(password == "1234567890123456789012(45678");
3297 3297
3298 QPDFObjectHandle uninitialized; 3298 QPDFObjectHandle uninitialized;
3299 - assert(uninitialized.getTypeCode() == QPDFObject::ot_uninitialized); 3299 + assert(uninitialized.getTypeCode() == ::ot_uninitialized);
3300 assert(strcmp(uninitialized.getTypeName(), "uninitialized") == 0); 3300 assert(strcmp(uninitialized.getTypeName(), "uninitialized") == 0);
3301 } 3301 }
3302 3302
qpdf/test_renumber.cc
@@ -40,37 +40,37 @@ compare(QPDFObjectHandle a, QPDFObjectHandle b) @@ -40,37 +40,37 @@ compare(QPDFObjectHandle a, QPDFObjectHandle b)
40 } 40 }
41 41
42 switch (a.getTypeCode()) { 42 switch (a.getTypeCode()) {
43 - case QPDFObject::ot_boolean: 43 + case ::ot_boolean:
44 if (a.getBoolValue() != b.getBoolValue()) { 44 if (a.getBoolValue() != b.getBoolValue()) {
45 std::cerr << "different boolean" << std::endl; 45 std::cerr << "different boolean" << std::endl;
46 return false; 46 return false;
47 } 47 }
48 break; 48 break;
49 - case QPDFObject::ot_integer: 49 + case ::ot_integer:
50 if (a.getIntValue() != b.getIntValue()) { 50 if (a.getIntValue() != b.getIntValue()) {
51 std::cerr << "different integer" << std::endl; 51 std::cerr << "different integer" << std::endl;
52 return false; 52 return false;
53 } 53 }
54 break; 54 break;
55 - case QPDFObject::ot_real: 55 + case ::ot_real:
56 if (a.getRealValue() != b.getRealValue()) { 56 if (a.getRealValue() != b.getRealValue()) {
57 std::cerr << "different real" << std::endl; 57 std::cerr << "different real" << std::endl;
58 return false; 58 return false;
59 } 59 }
60 break; 60 break;
61 - case QPDFObject::ot_string: 61 + case ::ot_string:
62 if (a.getStringValue() != b.getStringValue()) { 62 if (a.getStringValue() != b.getStringValue()) {
63 std::cerr << "different string" << std::endl; 63 std::cerr << "different string" << std::endl;
64 return false; 64 return false;
65 } 65 }
66 break; 66 break;
67 - case QPDFObject::ot_name: 67 + case ::ot_name:
68 if (a.getName() != b.getName()) { 68 if (a.getName() != b.getName()) {
69 std::cerr << "different name" << std::endl; 69 std::cerr << "different name" << std::endl;
70 return false; 70 return false;
71 } 71 }
72 break; 72 break;
73 - case QPDFObject::ot_array: 73 + case ::ot_array:
74 { 74 {
75 std::vector<QPDFObjectHandle> objs_a = a.getArrayAsVector(); 75 std::vector<QPDFObjectHandle> objs_a = a.getArrayAsVector();
76 std::vector<QPDFObjectHandle> objs_b = b.getArrayAsVector(); 76 std::vector<QPDFObjectHandle> objs_b = b.getArrayAsVector();
@@ -88,7 +88,7 @@ compare(QPDFObjectHandle a, QPDFObjectHandle b) @@ -88,7 +88,7 @@ compare(QPDFObjectHandle a, QPDFObjectHandle b)
88 } 88 }
89 } 89 }
90 break; 90 break;
91 - case QPDFObject::ot_dictionary: 91 + case ::ot_dictionary:
92 { 92 {
93 std::set<std::string> keys_a = a.getKeys(); 93 std::set<std::string> keys_a = a.getKeys();
94 std::set<std::string> keys_b = b.getKeys(); 94 std::set<std::string> keys_b = b.getKeys();
@@ -105,9 +105,9 @@ compare(QPDFObjectHandle a, QPDFObjectHandle b) @@ -105,9 +105,9 @@ compare(QPDFObjectHandle a, QPDFObjectHandle b)
105 } 105 }
106 } 106 }
107 break; 107 break;
108 - case QPDFObject::ot_null: 108 + case ::ot_null:
109 break; 109 break;
110 - case QPDFObject::ot_stream: 110 + case ::ot_stream:
111 std::cout << "stream objects are not compared" << std::endl; 111 std::cout << "stream objects are not compared" << std::endl;
112 break; 112 break;
113 default: 113 default: