Commit a8266ccb0ef67d07cfa92b5669b238012195d94f

Authored by Tobias Hoffmann
Committed by Jay Berkenbilt
1 parent 39bbaa86

Added public assert{Type} methods to QPDFObjectHandle

include/qpdf/QPDFObjectHandle.hh
@@ -410,6 +410,28 @@ class QPDFObjectHandle @@ -410,6 +410,28 @@ class QPDFObjectHandle
410 410
411 // Convenience routine: Throws if the assumption is violated. 411 // Convenience routine: Throws if the assumption is violated.
412 QPDF_DLL 412 QPDF_DLL
  413 + void assertInitialized() const;
  414 +
  415 + QPDF_DLL
  416 + void assertNull();
  417 + QPDF_DLL
  418 + void assertBool();
  419 + QPDF_DLL
  420 + void assertInteger();
  421 + QPDF_DLL
  422 + void assertReal();
  423 + QPDF_DLL
  424 + void assertName();
  425 + QPDF_DLL
  426 + void assertString();
  427 + QPDF_DLL
  428 + void assertArray();
  429 + QPDF_DLL
  430 + void assertDictionary();
  431 + QPDF_DLL
  432 + void assertStream();
  433 +
  434 + QPDF_DLL
413 void assertPageObject(); 435 void assertPageObject();
414 436
415 private: 437 private:
@@ -422,8 +444,7 @@ class QPDFObjectHandle @@ -422,8 +444,7 @@ class QPDFObjectHandle
422 QPDF* qpdf, int objid, int generation, 444 QPDF* qpdf, int objid, int generation,
423 QPDFObjectHandle stream_dict, qpdf_offset_t offset, size_t length); 445 QPDFObjectHandle stream_dict, qpdf_offset_t offset, size_t length);
424 446
425 - void assertInitialized() const;  
426 - void assertType(char const* type_name, bool istype); 447 + void assertType(char const* type_name, bool istype) const;
427 void dereference(); 448 void dereference();
428 void makeDirectInternal(std::set<int>& visited); 449 void makeDirectInternal(std::set<int>& visited);
429 void releaseResolved(); 450 void releaseResolved();
libqpdf/QPDFObjectHandle.cc
@@ -183,7 +183,7 @@ QPDFObjectHandle::isScalar() @@ -183,7 +183,7 @@ QPDFObjectHandle::isScalar()
183 bool 183 bool
184 QPDFObjectHandle::getBoolValue() 184 QPDFObjectHandle::getBoolValue()
185 { 185 {
186 - assertType("Boolean", isBool()); 186 + assertBool();
187 return dynamic_cast<QPDF_Bool*>(obj.getPointer())->getVal(); 187 return dynamic_cast<QPDF_Bool*>(obj.getPointer())->getVal();
188 } 188 }
189 189
@@ -192,7 +192,7 @@ QPDFObjectHandle::getBoolValue() @@ -192,7 +192,7 @@ QPDFObjectHandle::getBoolValue()
192 long long 192 long long
193 QPDFObjectHandle::getIntValue() 193 QPDFObjectHandle::getIntValue()
194 { 194 {
195 - assertType("Integer", isInteger()); 195 + assertInteger();
196 return dynamic_cast<QPDF_Integer*>(obj.getPointer())->getVal(); 196 return dynamic_cast<QPDF_Integer*>(obj.getPointer())->getVal();
197 } 197 }
198 198
@@ -201,7 +201,7 @@ QPDFObjectHandle::getIntValue() @@ -201,7 +201,7 @@ QPDFObjectHandle::getIntValue()
201 std::string 201 std::string
202 QPDFObjectHandle::getRealValue() 202 QPDFObjectHandle::getRealValue()
203 { 203 {
204 - assertType("Real", isReal()); 204 + assertReal();
205 return dynamic_cast<QPDF_Real*>(obj.getPointer())->getVal(); 205 return dynamic_cast<QPDF_Real*>(obj.getPointer())->getVal();
206 } 206 }
207 207
@@ -210,7 +210,7 @@ QPDFObjectHandle::getRealValue() @@ -210,7 +210,7 @@ QPDFObjectHandle::getRealValue()
210 std::string 210 std::string
211 QPDFObjectHandle::getName() 211 QPDFObjectHandle::getName()
212 { 212 {
213 - assertType("Name", isName()); 213 + assertName();
214 return dynamic_cast<QPDF_Name*>(obj.getPointer())->getName(); 214 return dynamic_cast<QPDF_Name*>(obj.getPointer())->getName();
215 } 215 }
216 216
@@ -219,14 +219,14 @@ QPDFObjectHandle::getName() @@ -219,14 +219,14 @@ QPDFObjectHandle::getName()
219 std::string 219 std::string
220 QPDFObjectHandle::getStringValue() 220 QPDFObjectHandle::getStringValue()
221 { 221 {
222 - assertType("String", isString()); 222 + assertString();
223 return dynamic_cast<QPDF_String*>(obj.getPointer())->getVal(); 223 return dynamic_cast<QPDF_String*>(obj.getPointer())->getVal();
224 } 224 }
225 225
226 std::string 226 std::string
227 QPDFObjectHandle::getUTF8Value() 227 QPDFObjectHandle::getUTF8Value()
228 { 228 {
229 - assertType("String", isString()); 229 + assertString();
230 return dynamic_cast<QPDF_String*>(obj.getPointer())->getUTF8Val(); 230 return dynamic_cast<QPDF_String*>(obj.getPointer())->getUTF8Val();
231 } 231 }
232 232
@@ -235,21 +235,21 @@ QPDFObjectHandle::getUTF8Value() @@ -235,21 +235,21 @@ QPDFObjectHandle::getUTF8Value()
235 int 235 int
236 QPDFObjectHandle::getArrayNItems() 236 QPDFObjectHandle::getArrayNItems()
237 { 237 {
238 - assertType("Array", isArray()); 238 + assertArray();
239 return dynamic_cast<QPDF_Array*>(obj.getPointer())->getNItems(); 239 return dynamic_cast<QPDF_Array*>(obj.getPointer())->getNItems();
240 } 240 }
241 241
242 QPDFObjectHandle 242 QPDFObjectHandle
243 QPDFObjectHandle::getArrayItem(int n) 243 QPDFObjectHandle::getArrayItem(int n)
244 { 244 {
245 - assertType("Array", isArray()); 245 + assertArray();
246 return dynamic_cast<QPDF_Array*>(obj.getPointer())->getItem(n); 246 return dynamic_cast<QPDF_Array*>(obj.getPointer())->getItem(n);
247 } 247 }
248 248
249 std::vector<QPDFObjectHandle> 249 std::vector<QPDFObjectHandle>
250 QPDFObjectHandle::getArrayAsVector() 250 QPDFObjectHandle::getArrayAsVector()
251 { 251 {
252 - assertType("Array", isArray()); 252 + assertArray();
253 return dynamic_cast<QPDF_Array*>(obj.getPointer())->getAsVector(); 253 return dynamic_cast<QPDF_Array*>(obj.getPointer())->getAsVector();
254 } 254 }
255 255
@@ -258,35 +258,35 @@ QPDFObjectHandle::getArrayAsVector() @@ -258,35 +258,35 @@ QPDFObjectHandle::getArrayAsVector()
258 void 258 void
259 QPDFObjectHandle::setArrayItem(int n, QPDFObjectHandle const& item) 259 QPDFObjectHandle::setArrayItem(int n, QPDFObjectHandle const& item)
260 { 260 {
261 - assertType("Array", isArray()); 261 + assertArray();
262 return dynamic_cast<QPDF_Array*>(obj.getPointer())->setItem(n, item); 262 return dynamic_cast<QPDF_Array*>(obj.getPointer())->setItem(n, item);
263 } 263 }
264 264
265 void 265 void
266 QPDFObjectHandle::setArrayFromVector(std::vector<QPDFObjectHandle> const& items) 266 QPDFObjectHandle::setArrayFromVector(std::vector<QPDFObjectHandle> const& items)
267 { 267 {
268 - assertType("Array", isArray()); 268 + assertArray();
269 return dynamic_cast<QPDF_Array*>(obj.getPointer())->setFromVector(items); 269 return dynamic_cast<QPDF_Array*>(obj.getPointer())->setFromVector(items);
270 } 270 }
271 271
272 void 272 void
273 QPDFObjectHandle::insertItem(int at, QPDFObjectHandle const& item) 273 QPDFObjectHandle::insertItem(int at, QPDFObjectHandle const& item)
274 { 274 {
275 - assertType("Array", isArray()); 275 + assertArray();
276 return dynamic_cast<QPDF_Array*>(obj.getPointer())->insertItem(at, item); 276 return dynamic_cast<QPDF_Array*>(obj.getPointer())->insertItem(at, item);
277 } 277 }
278 278
279 void 279 void
280 QPDFObjectHandle::appendItem(QPDFObjectHandle const& item) 280 QPDFObjectHandle::appendItem(QPDFObjectHandle const& item)
281 { 281 {
282 - assertType("Array", isArray()); 282 + assertArray();
283 return dynamic_cast<QPDF_Array*>(obj.getPointer())->appendItem(item); 283 return dynamic_cast<QPDF_Array*>(obj.getPointer())->appendItem(item);
284 } 284 }
285 285
286 void 286 void
287 QPDFObjectHandle::eraseItem(int at) 287 QPDFObjectHandle::eraseItem(int at)
288 { 288 {
289 - assertType("Array", isArray()); 289 + assertArray();
290 return dynamic_cast<QPDF_Array*>(obj.getPointer())->eraseItem(at); 290 return dynamic_cast<QPDF_Array*>(obj.getPointer())->eraseItem(at);
291 } 291 }
292 292
@@ -295,28 +295,28 @@ QPDFObjectHandle::eraseItem(int at) @@ -295,28 +295,28 @@ QPDFObjectHandle::eraseItem(int at)
295 bool 295 bool
296 QPDFObjectHandle::hasKey(std::string const& key) 296 QPDFObjectHandle::hasKey(std::string const& key)
297 { 297 {
298 - assertType("Dictionary", isDictionary()); 298 + assertDictionary();
299 return dynamic_cast<QPDF_Dictionary*>(obj.getPointer())->hasKey(key); 299 return dynamic_cast<QPDF_Dictionary*>(obj.getPointer())->hasKey(key);
300 } 300 }
301 301
302 QPDFObjectHandle 302 QPDFObjectHandle
303 QPDFObjectHandle::getKey(std::string const& key) 303 QPDFObjectHandle::getKey(std::string const& key)
304 { 304 {
305 - assertType("Dictionary", isDictionary()); 305 + assertDictionary();
306 return dynamic_cast<QPDF_Dictionary*>(obj.getPointer())->getKey(key); 306 return dynamic_cast<QPDF_Dictionary*>(obj.getPointer())->getKey(key);
307 } 307 }
308 308
309 std::set<std::string> 309 std::set<std::string>
310 QPDFObjectHandle::getKeys() 310 QPDFObjectHandle::getKeys()
311 { 311 {
312 - assertType("Dictionary", isDictionary()); 312 + assertDictionary();
313 return dynamic_cast<QPDF_Dictionary*>(obj.getPointer())->getKeys(); 313 return dynamic_cast<QPDF_Dictionary*>(obj.getPointer())->getKeys();
314 } 314 }
315 315
316 std::map<std::string, QPDFObjectHandle> 316 std::map<std::string, QPDFObjectHandle>
317 QPDFObjectHandle::getDictAsMap() 317 QPDFObjectHandle::getDictAsMap()
318 { 318 {
319 - assertType("Dictionary", isDictionary()); 319 + assertDictionary();
320 return dynamic_cast<QPDF_Dictionary*>(obj.getPointer())->getAsMap(); 320 return dynamic_cast<QPDF_Dictionary*>(obj.getPointer())->getAsMap();
321 } 321 }
322 322
@@ -349,7 +349,7 @@ void @@ -349,7 +349,7 @@ void
349 QPDFObjectHandle::replaceKey(std::string const& key, 349 QPDFObjectHandle::replaceKey(std::string const& key,
350 QPDFObjectHandle const& value) 350 QPDFObjectHandle const& value)
351 { 351 {
352 - assertType("Dictionary", isDictionary()); 352 + assertDictionary();
353 return dynamic_cast<QPDF_Dictionary*>( 353 return dynamic_cast<QPDF_Dictionary*>(
354 obj.getPointer())->replaceKey(key, value); 354 obj.getPointer())->replaceKey(key, value);
355 } 355 }
@@ -357,7 +357,7 @@ QPDFObjectHandle::replaceKey(std::string const&amp; key, @@ -357,7 +357,7 @@ QPDFObjectHandle::replaceKey(std::string const&amp; key,
357 void 357 void
358 QPDFObjectHandle::removeKey(std::string const& key) 358 QPDFObjectHandle::removeKey(std::string const& key)
359 { 359 {
360 - assertType("Dictionary", isDictionary()); 360 + assertDictionary();
361 return dynamic_cast<QPDF_Dictionary*>(obj.getPointer())->removeKey(key); 361 return dynamic_cast<QPDF_Dictionary*>(obj.getPointer())->removeKey(key);
362 } 362 }
363 363
@@ -365,7 +365,7 @@ void @@ -365,7 +365,7 @@ void
365 QPDFObjectHandle::replaceOrRemoveKey(std::string const& key, 365 QPDFObjectHandle::replaceOrRemoveKey(std::string const& key,
366 QPDFObjectHandle value) 366 QPDFObjectHandle value)
367 { 367 {
368 - assertType("Dictionary", isDictionary()); 368 + assertDictionary();
369 return dynamic_cast<QPDF_Dictionary*>( 369 return dynamic_cast<QPDF_Dictionary*>(
370 obj.getPointer())->replaceOrRemoveKey(key, value); 370 obj.getPointer())->replaceOrRemoveKey(key, value);
371 } 371 }
@@ -374,21 +374,21 @@ QPDFObjectHandle::replaceOrRemoveKey(std::string const&amp; key, @@ -374,21 +374,21 @@ QPDFObjectHandle::replaceOrRemoveKey(std::string const&amp; key,
374 QPDFObjectHandle 374 QPDFObjectHandle
375 QPDFObjectHandle::getDict() 375 QPDFObjectHandle::getDict()
376 { 376 {
377 - assertType("Stream", isStream()); 377 + assertStream();
378 return dynamic_cast<QPDF_Stream*>(obj.getPointer())->getDict(); 378 return dynamic_cast<QPDF_Stream*>(obj.getPointer())->getDict();
379 } 379 }
380 380
381 PointerHolder<Buffer> 381 PointerHolder<Buffer>
382 QPDFObjectHandle::getStreamData() 382 QPDFObjectHandle::getStreamData()
383 { 383 {
384 - assertType("Stream", isStream()); 384 + assertStream();
385 return dynamic_cast<QPDF_Stream*>(obj.getPointer())->getStreamData(); 385 return dynamic_cast<QPDF_Stream*>(obj.getPointer())->getStreamData();
386 } 386 }
387 387
388 PointerHolder<Buffer> 388 PointerHolder<Buffer>
389 QPDFObjectHandle::getRawStreamData() 389 QPDFObjectHandle::getRawStreamData()
390 { 390 {
391 - assertType("Stream", isStream()); 391 + assertStream();
392 return dynamic_cast<QPDF_Stream*>(obj.getPointer())->getRawStreamData(); 392 return dynamic_cast<QPDF_Stream*>(obj.getPointer())->getRawStreamData();
393 } 393 }
394 394
@@ -396,7 +396,7 @@ bool @@ -396,7 +396,7 @@ bool
396 QPDFObjectHandle::pipeStreamData(Pipeline* p, bool filter, 396 QPDFObjectHandle::pipeStreamData(Pipeline* p, bool filter,
397 bool normalize, bool compress) 397 bool normalize, bool compress)
398 { 398 {
399 - assertType("Stream", isStream()); 399 + assertStream();
400 return dynamic_cast<QPDF_Stream*>(obj.getPointer())->pipeStreamData( 400 return dynamic_cast<QPDF_Stream*>(obj.getPointer())->pipeStreamData(
401 p, filter, normalize, compress); 401 p, filter, normalize, compress);
402 } 402 }
@@ -406,7 +406,7 @@ QPDFObjectHandle::replaceStreamData(PointerHolder&lt;Buffer&gt; data, @@ -406,7 +406,7 @@ QPDFObjectHandle::replaceStreamData(PointerHolder&lt;Buffer&gt; data,
406 QPDFObjectHandle const& filter, 406 QPDFObjectHandle const& filter,
407 QPDFObjectHandle const& decode_parms) 407 QPDFObjectHandle const& decode_parms)
408 { 408 {
409 - assertType("Stream", isStream()); 409 + assertStream();
410 dynamic_cast<QPDF_Stream*>(obj.getPointer())->replaceStreamData( 410 dynamic_cast<QPDF_Stream*>(obj.getPointer())->replaceStreamData(
411 data, filter, decode_parms); 411 data, filter, decode_parms);
412 } 412 }
@@ -416,7 +416,7 @@ QPDFObjectHandle::replaceStreamData(PointerHolder&lt;StreamDataProvider&gt; provider, @@ -416,7 +416,7 @@ QPDFObjectHandle::replaceStreamData(PointerHolder&lt;StreamDataProvider&gt; provider,
416 QPDFObjectHandle const& filter, 416 QPDFObjectHandle const& filter,
417 QPDFObjectHandle const& decode_parms) 417 QPDFObjectHandle const& decode_parms)
418 { 418 {
419 - assertType("Stream", isStream()); 419 + assertStream();
420 dynamic_cast<QPDF_Stream*>(obj.getPointer())->replaceStreamData( 420 dynamic_cast<QPDF_Stream*>(obj.getPointer())->replaceStreamData(
421 provider, filter, decode_parms); 421 provider, filter, decode_parms);
422 } 422 }
@@ -524,7 +524,7 @@ void @@ -524,7 +524,7 @@ void
524 QPDFObjectHandle::addPageContents(QPDFObjectHandle new_contents, bool first) 524 QPDFObjectHandle::addPageContents(QPDFObjectHandle new_contents, bool first)
525 { 525 {
526 assertPageObject(); 526 assertPageObject();
527 - new_contents.assertType("Stream", new_contents.isStream()); 527 + new_contents.assertStream();
528 528
529 std::vector<QPDFObjectHandle> orig_contents = getPageContents(); 529 std::vector<QPDFObjectHandle> orig_contents = getPageContents();
530 530
@@ -839,7 +839,7 @@ QPDFObjectHandle::assertInitialized() const @@ -839,7 +839,7 @@ QPDFObjectHandle::assertInitialized() const
839 } 839 }
840 840
841 void 841 void
842 -QPDFObjectHandle::assertType(char const* type_name, bool istype) 842 +QPDFObjectHandle::assertType(char const* type_name, bool istype) const
843 { 843 {
844 if (! istype) 844 if (! istype)
845 { 845 {
@@ -849,6 +849,60 @@ QPDFObjectHandle::assertType(char const* type_name, bool istype) @@ -849,6 +849,60 @@ QPDFObjectHandle::assertType(char const* type_name, bool istype)
849 } 849 }
850 850
851 void 851 void
  852 +QPDFObjectHandle::assertNull()
  853 +{
  854 + assertType("Null", isNull());
  855 +}
  856 +
  857 +void
  858 +QPDFObjectHandle::assertBool()
  859 +{
  860 + assertType("Boolean", isBool());
  861 +}
  862 +
  863 +void
  864 +QPDFObjectHandle::assertInteger()
  865 +{
  866 + assertType("Integer", isInteger());
  867 +}
  868 +
  869 +void
  870 +QPDFObjectHandle::assertReal()
  871 +{
  872 + assertType("Real", isReal());
  873 +}
  874 +
  875 +void
  876 +QPDFObjectHandle::assertName()
  877 +{
  878 + assertType("Name", isName());
  879 +}
  880 +
  881 +void
  882 +QPDFObjectHandle::assertString()
  883 +{
  884 + assertType("String", isString());
  885 +}
  886 +
  887 +void
  888 +QPDFObjectHandle::assertArray()
  889 +{
  890 + assertType("Array", isArray());
  891 +}
  892 +
  893 +void
  894 +QPDFObjectHandle::assertDictionary()
  895 +{
  896 + assertType("Dictionary", isDictionary());
  897 +}
  898 +
  899 +void
  900 +QPDFObjectHandle::assertStream()
  901 +{
  902 + assertType("Stream", isStream());
  903 +}
  904 +
  905 +void
852 QPDFObjectHandle::assertPageObject() 906 QPDFObjectHandle::assertPageObject()
853 { 907 {
854 if (! (this->isDictionary() && this->hasKey("/Type") && 908 if (! (this->isDictionary() && this->hasKey("/Type") &&