From a8266ccb0ef67d07cfa92b5669b238012195d94f Mon Sep 17 00:00:00 2001 From: Tobias Hoffmann Date: Tue, 19 Jun 2012 00:58:30 +0200 Subject: [PATCH] Added public assert{Type} methods to QPDFObjectHandle --- include/qpdf/QPDFObjectHandle.hh | 25 ++++++- libqpdf/QPDFObjectHandle.cc | 112 +++++++++++++++++++++++-------- 2 files changed, 106 insertions(+), 31 deletions(-) diff --git a/include/qpdf/QPDFObjectHandle.hh b/include/qpdf/QPDFObjectHandle.hh index 421b0144..6ca06caa 100644 --- a/include/qpdf/QPDFObjectHandle.hh +++ b/include/qpdf/QPDFObjectHandle.hh @@ -409,6 +409,28 @@ class QPDFObjectHandle friend class ReleaseResolver; // Convenience routine: Throws if the assumption is violated. + QPDF_DLL + void assertInitialized() const; + + QPDF_DLL + void assertNull(); + QPDF_DLL + void assertBool(); + QPDF_DLL + void assertInteger(); + QPDF_DLL + void assertReal(); + QPDF_DLL + void assertName(); + QPDF_DLL + void assertString(); + QPDF_DLL + void assertArray(); + QPDF_DLL + void assertDictionary(); + QPDF_DLL + void assertStream(); + QPDF_DLL void assertPageObject(); @@ -422,8 +444,7 @@ class QPDFObjectHandle QPDF* qpdf, int objid, int generation, QPDFObjectHandle stream_dict, qpdf_offset_t offset, size_t length); - void assertInitialized() const; - void assertType(char const* type_name, bool istype); + void assertType(char const* type_name, bool istype) const; void dereference(); void makeDirectInternal(std::set& visited); void releaseResolved(); diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc index c8b67416..43aa44bf 100644 --- a/libqpdf/QPDFObjectHandle.cc +++ b/libqpdf/QPDFObjectHandle.cc @@ -183,7 +183,7 @@ QPDFObjectHandle::isScalar() bool QPDFObjectHandle::getBoolValue() { - assertType("Boolean", isBool()); + assertBool(); return dynamic_cast(obj.getPointer())->getVal(); } @@ -192,7 +192,7 @@ QPDFObjectHandle::getBoolValue() long long QPDFObjectHandle::getIntValue() { - assertType("Integer", isInteger()); + assertInteger(); return dynamic_cast(obj.getPointer())->getVal(); } @@ -201,7 +201,7 @@ QPDFObjectHandle::getIntValue() std::string QPDFObjectHandle::getRealValue() { - assertType("Real", isReal()); + assertReal(); return dynamic_cast(obj.getPointer())->getVal(); } @@ -210,7 +210,7 @@ QPDFObjectHandle::getRealValue() std::string QPDFObjectHandle::getName() { - assertType("Name", isName()); + assertName(); return dynamic_cast(obj.getPointer())->getName(); } @@ -219,14 +219,14 @@ QPDFObjectHandle::getName() std::string QPDFObjectHandle::getStringValue() { - assertType("String", isString()); + assertString(); return dynamic_cast(obj.getPointer())->getVal(); } std::string QPDFObjectHandle::getUTF8Value() { - assertType("String", isString()); + assertString(); return dynamic_cast(obj.getPointer())->getUTF8Val(); } @@ -235,21 +235,21 @@ QPDFObjectHandle::getUTF8Value() int QPDFObjectHandle::getArrayNItems() { - assertType("Array", isArray()); + assertArray(); return dynamic_cast(obj.getPointer())->getNItems(); } QPDFObjectHandle QPDFObjectHandle::getArrayItem(int n) { - assertType("Array", isArray()); + assertArray(); return dynamic_cast(obj.getPointer())->getItem(n); } std::vector QPDFObjectHandle::getArrayAsVector() { - assertType("Array", isArray()); + assertArray(); return dynamic_cast(obj.getPointer())->getAsVector(); } @@ -258,35 +258,35 @@ QPDFObjectHandle::getArrayAsVector() void QPDFObjectHandle::setArrayItem(int n, QPDFObjectHandle const& item) { - assertType("Array", isArray()); + assertArray(); return dynamic_cast(obj.getPointer())->setItem(n, item); } void QPDFObjectHandle::setArrayFromVector(std::vector const& items) { - assertType("Array", isArray()); + assertArray(); return dynamic_cast(obj.getPointer())->setFromVector(items); } void QPDFObjectHandle::insertItem(int at, QPDFObjectHandle const& item) { - assertType("Array", isArray()); + assertArray(); return dynamic_cast(obj.getPointer())->insertItem(at, item); } void QPDFObjectHandle::appendItem(QPDFObjectHandle const& item) { - assertType("Array", isArray()); + assertArray(); return dynamic_cast(obj.getPointer())->appendItem(item); } void QPDFObjectHandle::eraseItem(int at) { - assertType("Array", isArray()); + assertArray(); return dynamic_cast(obj.getPointer())->eraseItem(at); } @@ -295,28 +295,28 @@ QPDFObjectHandle::eraseItem(int at) bool QPDFObjectHandle::hasKey(std::string const& key) { - assertType("Dictionary", isDictionary()); + assertDictionary(); return dynamic_cast(obj.getPointer())->hasKey(key); } QPDFObjectHandle QPDFObjectHandle::getKey(std::string const& key) { - assertType("Dictionary", isDictionary()); + assertDictionary(); return dynamic_cast(obj.getPointer())->getKey(key); } std::set QPDFObjectHandle::getKeys() { - assertType("Dictionary", isDictionary()); + assertDictionary(); return dynamic_cast(obj.getPointer())->getKeys(); } std::map QPDFObjectHandle::getDictAsMap() { - assertType("Dictionary", isDictionary()); + assertDictionary(); return dynamic_cast(obj.getPointer())->getAsMap(); } @@ -349,7 +349,7 @@ void QPDFObjectHandle::replaceKey(std::string const& key, QPDFObjectHandle const& value) { - assertType("Dictionary", isDictionary()); + assertDictionary(); return dynamic_cast( obj.getPointer())->replaceKey(key, value); } @@ -357,7 +357,7 @@ QPDFObjectHandle::replaceKey(std::string const& key, void QPDFObjectHandle::removeKey(std::string const& key) { - assertType("Dictionary", isDictionary()); + assertDictionary(); return dynamic_cast(obj.getPointer())->removeKey(key); } @@ -365,7 +365,7 @@ void QPDFObjectHandle::replaceOrRemoveKey(std::string const& key, QPDFObjectHandle value) { - assertType("Dictionary", isDictionary()); + assertDictionary(); return dynamic_cast( obj.getPointer())->replaceOrRemoveKey(key, value); } @@ -374,21 +374,21 @@ QPDFObjectHandle::replaceOrRemoveKey(std::string const& key, QPDFObjectHandle QPDFObjectHandle::getDict() { - assertType("Stream", isStream()); + assertStream(); return dynamic_cast(obj.getPointer())->getDict(); } PointerHolder QPDFObjectHandle::getStreamData() { - assertType("Stream", isStream()); + assertStream(); return dynamic_cast(obj.getPointer())->getStreamData(); } PointerHolder QPDFObjectHandle::getRawStreamData() { - assertType("Stream", isStream()); + assertStream(); return dynamic_cast(obj.getPointer())->getRawStreamData(); } @@ -396,7 +396,7 @@ bool QPDFObjectHandle::pipeStreamData(Pipeline* p, bool filter, bool normalize, bool compress) { - assertType("Stream", isStream()); + assertStream(); return dynamic_cast(obj.getPointer())->pipeStreamData( p, filter, normalize, compress); } @@ -406,7 +406,7 @@ QPDFObjectHandle::replaceStreamData(PointerHolder data, QPDFObjectHandle const& filter, QPDFObjectHandle const& decode_parms) { - assertType("Stream", isStream()); + assertStream(); dynamic_cast(obj.getPointer())->replaceStreamData( data, filter, decode_parms); } @@ -416,7 +416,7 @@ QPDFObjectHandle::replaceStreamData(PointerHolder provider, QPDFObjectHandle const& filter, QPDFObjectHandle const& decode_parms) { - assertType("Stream", isStream()); + assertStream(); dynamic_cast(obj.getPointer())->replaceStreamData( provider, filter, decode_parms); } @@ -524,7 +524,7 @@ void QPDFObjectHandle::addPageContents(QPDFObjectHandle new_contents, bool first) { assertPageObject(); - new_contents.assertType("Stream", new_contents.isStream()); + new_contents.assertStream(); std::vector orig_contents = getPageContents(); @@ -839,7 +839,7 @@ QPDFObjectHandle::assertInitialized() const } void -QPDFObjectHandle::assertType(char const* type_name, bool istype) +QPDFObjectHandle::assertType(char const* type_name, bool istype) const { if (! istype) { @@ -848,6 +848,60 @@ QPDFObjectHandle::assertType(char const* type_name, bool istype) } } +void +QPDFObjectHandle::assertNull() +{ + assertType("Null", isNull()); +} + +void +QPDFObjectHandle::assertBool() +{ + assertType("Boolean", isBool()); +} + +void +QPDFObjectHandle::assertInteger() +{ + assertType("Integer", isInteger()); +} + +void +QPDFObjectHandle::assertReal() +{ + assertType("Real", isReal()); +} + +void +QPDFObjectHandle::assertName() +{ + assertType("Name", isName()); +} + +void +QPDFObjectHandle::assertString() +{ + assertType("String", isString()); +} + +void +QPDFObjectHandle::assertArray() +{ + assertType("Array", isArray()); +} + +void +QPDFObjectHandle::assertDictionary() +{ + assertType("Dictionary", isDictionary()); +} + +void +QPDFObjectHandle::assertStream() +{ + assertType("Stream", isStream()); +} + void QPDFObjectHandle::assertPageObject() {