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 | 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 | 7 | * More optimizations and cleanup from m-holger (#726, #730) |
| 4 | 8 | including major refactor of QPDF's internal representations of |
| 5 | 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 | 61 | * may be added to the list, so code that switches on these values |
| 62 | 62 | * should take that into consideration. (Maintainer note: it would be |
| 63 | 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 | 67 | enum qpdf_object_type_e { |
| 69 | 68 | /* Object types internal to qpdf */ |
| ... | ... | @@ -84,7 +83,6 @@ enum qpdf_object_type_e { |
| 84 | 83 | ot_inlineimage, |
| 85 | 84 | /* Object types internal to qpdf */ |
| 86 | 85 | ot_unresolved, |
| 87 | - /* NOTE: if adding to this list, update QPDFObject.hh */ | |
| 88 | 86 | }; |
| 89 | 87 | |
| 90 | 88 | /* Write Parameters. See QPDFWriter.hh for details. */ | ... | ... |
include/qpdf/QPDFObject.hh
| ... | ... | @@ -38,32 +38,6 @@ class QPDFObject |
| 38 | 38 | friend class QPDFValue; |
| 39 | 39 | |
| 40 | 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 | 41 | QPDFObject() = default; |
| 68 | 42 | virtual ~QPDFObject() = default; |
| 69 | 43 | |
| ... | ... | @@ -84,7 +58,7 @@ class QPDFObject |
| 84 | 58 | } |
| 85 | 59 | |
| 86 | 60 | // Return a unique type code for the object |
| 87 | - object_type_e | |
| 61 | + qpdf_object_type_e | |
| 88 | 62 | getTypeCode() const |
| 89 | 63 | { |
| 90 | 64 | return value->type_code; | ... | ... |
include/qpdf/QPDFObjectHandle.hh
| ... | ... | @@ -338,7 +338,7 @@ class QPDFObjectHandle |
| 338 | 338 | // useful for doing rapid type tests (like switch statements) or |
| 339 | 339 | // for testing and debugging. |
| 340 | 340 | QPDF_DLL |
| 341 | - QPDFObject::object_type_e getTypeCode(); | |
| 341 | + qpdf_object_type_e getTypeCode(); | |
| 342 | 342 | QPDF_DLL |
| 343 | 343 | char const* getTypeName(); |
| 344 | 344 | ... | ... |
libqpdf/QPDFObjectHandle.cc
| ... | ... | @@ -251,11 +251,10 @@ QPDFObjectHandle::releaseResolved() |
| 251 | 251 | } |
| 252 | 252 | } |
| 253 | 253 | |
| 254 | -QPDFObject::object_type_e | |
| 254 | +qpdf_object_type_e | |
| 255 | 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 | 260 | char const* |
| ... | ... | @@ -347,7 +346,7 @@ QPDFObjectHandle::asString() |
| 347 | 346 | bool |
| 348 | 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 | 352 | bool |
| ... | ... | @@ -357,25 +356,25 @@ QPDFObjectHandle::isDirectNull() const |
| 357 | 356 | // objid == 0, so there's nothing to resolve. |
| 358 | 357 | return ( |
| 359 | 358 | isInitialized() && (getObjectID() == 0) && |
| 360 | - (obj->getTypeCode() == QPDFObject::ot_null)); | |
| 359 | + (obj->getTypeCode() == ::ot_null)); | |
| 361 | 360 | } |
| 362 | 361 | |
| 363 | 362 | bool |
| 364 | 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 | 368 | bool |
| 370 | 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 | 374 | bool |
| 376 | 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 | 380 | bool |
| ... | ... | @@ -412,49 +411,49 @@ QPDFObjectHandle::getValueAsNumber(double& value) |
| 412 | 411 | bool |
| 413 | 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 | 417 | bool |
| 419 | 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 | 423 | bool |
| 425 | 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 | 429 | bool |
| 431 | 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 | 435 | bool |
| 437 | 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 | 441 | bool |
| 443 | 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 | 447 | bool |
| 449 | 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 | 453 | bool |
| 455 | 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 | 459 | bool | ... | ... |
manual/release-notes.rst
| ... | ... | @@ -95,6 +95,18 @@ For a detailed list of changes, please see the file |
| 95 | 95 | |
| 96 | 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 | 110 | - Pipeline::write now takes ``unsigned char const*`` instead of |
| 99 | 111 | ``unsigned char*``. Callers don't need to change anything, but |
| 100 | 112 | you no longer have to pass writable pointers to pipelines. If | ... | ... |
qpdf/test_driver.cc
| ... | ... | @@ -103,7 +103,7 @@ ParserCallbacks::handleObject( |
| 103 | 103 | << ", length=" << length << ": "; |
| 104 | 104 | if (obj.isInlineImage()) { |
| 105 | 105 | // Exercise getTypeCode |
| 106 | - assert(obj.getTypeCode() == QPDFObject::ot_inlineimage); | |
| 106 | + assert(obj.getTypeCode() == ::ot_inlineimage); | |
| 107 | 107 | std::cout << QUtil::hex_encode(obj.getInlineImageValue()) << std::endl; |
| 108 | 108 | } else { |
| 109 | 109 | std::cout << obj.unparse() << std::endl; |
| ... | ... | @@ -3296,7 +3296,7 @@ runtest(int n, char const* filename1, char const* arg2) |
| 3296 | 3296 | assert(password == "1234567890123456789012(45678"); |
| 3297 | 3297 | |
| 3298 | 3298 | QPDFObjectHandle uninitialized; |
| 3299 | - assert(uninitialized.getTypeCode() == QPDFObject::ot_uninitialized); | |
| 3299 | + assert(uninitialized.getTypeCode() == ::ot_uninitialized); | |
| 3300 | 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 | 40 | } |
| 41 | 41 | |
| 42 | 42 | switch (a.getTypeCode()) { |
| 43 | - case QPDFObject::ot_boolean: | |
| 43 | + case ::ot_boolean: | |
| 44 | 44 | if (a.getBoolValue() != b.getBoolValue()) { |
| 45 | 45 | std::cerr << "different boolean" << std::endl; |
| 46 | 46 | return false; |
| 47 | 47 | } |
| 48 | 48 | break; |
| 49 | - case QPDFObject::ot_integer: | |
| 49 | + case ::ot_integer: | |
| 50 | 50 | if (a.getIntValue() != b.getIntValue()) { |
| 51 | 51 | std::cerr << "different integer" << std::endl; |
| 52 | 52 | return false; |
| 53 | 53 | } |
| 54 | 54 | break; |
| 55 | - case QPDFObject::ot_real: | |
| 55 | + case ::ot_real: | |
| 56 | 56 | if (a.getRealValue() != b.getRealValue()) { |
| 57 | 57 | std::cerr << "different real" << std::endl; |
| 58 | 58 | return false; |
| 59 | 59 | } |
| 60 | 60 | break; |
| 61 | - case QPDFObject::ot_string: | |
| 61 | + case ::ot_string: | |
| 62 | 62 | if (a.getStringValue() != b.getStringValue()) { |
| 63 | 63 | std::cerr << "different string" << std::endl; |
| 64 | 64 | return false; |
| 65 | 65 | } |
| 66 | 66 | break; |
| 67 | - case QPDFObject::ot_name: | |
| 67 | + case ::ot_name: | |
| 68 | 68 | if (a.getName() != b.getName()) { |
| 69 | 69 | std::cerr << "different name" << std::endl; |
| 70 | 70 | return false; |
| 71 | 71 | } |
| 72 | 72 | break; |
| 73 | - case QPDFObject::ot_array: | |
| 73 | + case ::ot_array: | |
| 74 | 74 | { |
| 75 | 75 | std::vector<QPDFObjectHandle> objs_a = a.getArrayAsVector(); |
| 76 | 76 | std::vector<QPDFObjectHandle> objs_b = b.getArrayAsVector(); |
| ... | ... | @@ -88,7 +88,7 @@ compare(QPDFObjectHandle a, QPDFObjectHandle b) |
| 88 | 88 | } |
| 89 | 89 | } |
| 90 | 90 | break; |
| 91 | - case QPDFObject::ot_dictionary: | |
| 91 | + case ::ot_dictionary: | |
| 92 | 92 | { |
| 93 | 93 | std::set<std::string> keys_a = a.getKeys(); |
| 94 | 94 | std::set<std::string> keys_b = b.getKeys(); |
| ... | ... | @@ -105,9 +105,9 @@ compare(QPDFObjectHandle a, QPDFObjectHandle b) |
| 105 | 105 | } |
| 106 | 106 | } |
| 107 | 107 | break; |
| 108 | - case QPDFObject::ot_null: | |
| 108 | + case ::ot_null: | |
| 109 | 109 | break; |
| 110 | - case QPDFObject::ot_stream: | |
| 110 | + case ::ot_stream: | |
| 111 | 111 | std::cout << "stream objects are not compared" << std::endl; |
| 112 | 112 | break; |
| 113 | 113 | default: | ... | ... |