Commit b66392653871f834d7b78aa423ca279e4828951a
1 parent
a47b9995
Remove QPDFObject::object_type_e as alias for qpdf_object_type_e
Showing
8 changed files
with
46 additions
and
59 deletions
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& value) | @@ -412,49 +411,49 @@ QPDFObjectHandle::getValueAsNumber(double& 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: |