1515#include " value.hpp"
1616
1717#include < algorithm>
18+ #include < functional>
1819#include < iostream>
1920#include < memory>
21+ #include < numeric>
2022
2123// *****************************************************************************
2224namespace {
@@ -1363,11 +1365,7 @@ size_t TiffDataEntry::doSizeData() const {
13631365}
13641366
13651367size_t TiffSubIfd::doSizeData () const {
1366- size_t len = 0 ;
1367- for (auto && ifd : ifds_) {
1368- len += ifd->size ();
1369- }
1370- return len;
1368+ return std::transform_reduce (ifds_.begin (), ifds_.end (), size_t {0 }, std::plus<>(), std::mem_fn (&TiffSubIfd::size));
13711369}
13721370
13731371size_t TiffIfdMakernote::doSizeData () const {
@@ -1379,22 +1377,14 @@ size_t TiffComponent::sizeImage() const {
13791377}
13801378
13811379size_t TiffDirectory::doSizeImage () const {
1382- size_t len = 0 ;
1383- for (auto && component : components_) {
1384- len += component->sizeImage ();
1385- }
1386- if (pNext_) {
1387- len += pNext_->sizeImage ();
1388- }
1389- return len;
1380+ size_t len = pNext_ ? pNext_->sizeImage () : 0 ;
1381+ return std::transform_reduce (components_.begin (), components_.end (), len, std::plus<>(),
1382+ std::mem_fn (&TiffDirectory::sizeImage));
13901383}
13911384
13921385size_t TiffSubIfd::doSizeImage () const {
1393- size_t len = 0 ;
1394- for (auto && ifd : ifds_) {
1395- len += ifd->sizeImage ();
1396- }
1397- return len;
1386+ return std::transform_reduce (ifds_.begin (), ifds_.end (), size_t {0 }, std::plus<>(),
1387+ std::mem_fn (&TiffSubIfd::sizeImage));
13981388} // TiffSubIfd::doSizeImage
13991389
14001390size_t TiffIfdMakernote::doSizeImage () const {
@@ -1409,11 +1399,9 @@ size_t TiffImageEntry::doSizeImage() const {
14091399 if (!pValue ())
14101400 return 0 ;
14111401 auto len = pValue ()->sizeDataArea ();
1412- if (len == 0 ) {
1413- for (const auto & [_, off] : strips_) {
1414- len += off;
1415- }
1416- }
1402+ if (len == 0 )
1403+ return std::transform_reduce (strips_.begin (), strips_.end (), len, std::plus<>(),
1404+ [](const auto & s) { return s.second ; });
14171405 return len;
14181406} // TiffImageEntry::doSizeImage
14191407
0 commit comments