Commit 53acbf15f867100b92f987f5d80e1e74ba978c75

Authored by m-holger
1 parent 1e8ce4a7

Refactor `QPDFObjectHandle::isRectangle` etc methods: replace `as_array` with `A…

…rray`, use subscript operators, simplify logic, and improve readability.
Showing 1 changed file with 31 additions and 38 deletions
libqpdf/QPDF_Array.cc
@@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
2 2
3 #include <qpdf/QTC.hh> 3 #include <qpdf/QTC.hh>
4 4
  5 +#include <array>
5 #include <utility> 6 #include <utility>
6 7
7 using namespace std::literals; 8 using namespace std::literals;
@@ -381,69 +382,61 @@ QPDFObjectHandle::getArrayItem(int n) const @@ -381,69 +382,61 @@ QPDFObjectHandle::getArrayItem(int n) const
381 bool 382 bool
382 QPDFObjectHandle::isRectangle() const 383 QPDFObjectHandle::isRectangle() const
383 { 384 {
384 - if (auto array = as_array(strict)) {  
385 - for (int i = 0; i < 4; ++i) {  
386 - if (auto item = array.at(i).second; !item.isNumber()) {  
387 - return false;  
388 - } 385 + Array array(*this);
  386 + for (auto const& oh: array) {
  387 + if (!oh.isNumber()) {
  388 + return false;
389 } 389 }
390 - return array.size() == 4;  
391 } 390 }
392 - return false; 391 + return array.size() == 4;
393 } 392 }
394 393
395 bool 394 bool
396 QPDFObjectHandle::isMatrix() const 395 QPDFObjectHandle::isMatrix() const
397 { 396 {
398 - if (auto array = as_array(strict)) {  
399 - for (int i = 0; i < 6; ++i) {  
400 - if (auto item = array.at(i).second; !item.isNumber()) {  
401 - return false;  
402 - } 397 + Array array(*this);
  398 + for (auto const& oh: array) {
  399 + if (!oh.isNumber()) {
  400 + return false;
403 } 401 }
404 - return array.size() == 6;  
405 } 402 }
406 - return false; 403 + return array.size() == 6;
407 } 404 }
408 405
409 QPDFObjectHandle::Rectangle 406 QPDFObjectHandle::Rectangle
410 QPDFObjectHandle::getArrayAsRectangle() const 407 QPDFObjectHandle::getArrayAsRectangle() const
411 { 408 {
412 - if (auto array = as_array(strict)) {  
413 - if (array.size() != 4) { 409 + Array array(*this);
  410 + if (array.size() != 4) {
  411 + return {};
  412 + }
  413 + std::array<double, 4> items;
  414 + for (size_t i = 0; i < 4; ++i) {
  415 + if (!array[i].getValueAsNumber(items[i])) {
414 return {}; 416 return {};
415 } 417 }
416 - double items[4];  
417 - for (int i = 0; i < 4; ++i) {  
418 - if (auto item = array.at(i).second; !item.getValueAsNumber(items[i])) {  
419 - return {};  
420 - }  
421 - }  
422 - return {  
423 - std::min(items[0], items[2]),  
424 - std::min(items[1], items[3]),  
425 - std::max(items[0], items[2]),  
426 - std::max(items[1], items[3])};  
427 } 418 }
428 - return {}; 419 + return {
  420 + std::min(items[0], items[2]),
  421 + std::min(items[1], items[3]),
  422 + std::max(items[0], items[2]),
  423 + std::max(items[1], items[3])};
429 } 424 }
430 425
431 QPDFObjectHandle::Matrix 426 QPDFObjectHandle::Matrix
432 QPDFObjectHandle::getArrayAsMatrix() const 427 QPDFObjectHandle::getArrayAsMatrix() const
433 { 428 {
434 - if (auto array = as_array(strict)) {  
435 - if (array.size() != 6) { 429 + Array array(*this);
  430 + if (array.size() != 6) {
  431 + return {};
  432 + }
  433 + std::array<double, 6> items;
  434 + for (size_t i = 0; i < 6; ++i) {
  435 + if (!array[i].getValueAsNumber(items[i])) {
436 return {}; 436 return {};
437 } 437 }
438 - double items[6];  
439 - for (int i = 0; i < 6; ++i) {  
440 - if (auto item = array.at(i).second; !item.getValueAsNumber(items[i])) {  
441 - return {};  
442 - }  
443 - }  
444 - return {items[0], items[1], items[2], items[3], items[4], items[5]};  
445 } 438 }
446 - return {}; 439 + return {items[0], items[1], items[2], items[3], items[4], items[5]};
447 } 440 }
448 441
449 std::vector<QPDFObjectHandle> 442 std::vector<QPDFObjectHandle>