Commit b66392653871f834d7b78aa423ca279e4828951a

Authored by Jay Berkenbilt
1 parent a47b9995

Remove QPDFObject::object_type_e as alias for qpdf_object_type_e

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&amp; 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:
... ...