Patch: Sort iptc data by record number when encoding ยป iptc_sorted_records_patch.diff
src/iptc.cpp (Arbeitskopie) | ||
---|---|---|
469 | 469 |
return 0; |
470 | 470 |
} // IptcParser::decode |
471 | 471 | |
472 |
/*! |
|
473 |
@brief Compare two iptc items by record. Return true if the record of |
|
474 |
lhs is less than that of rhs. |
|
475 | ||
476 |
This is a helper function for IptcParser::encode(). |
|
477 |
*/ |
|
478 |
bool cmpIptcdataByRecord(const Iptcdatum& lhs, const Iptcdatum& rhs) |
|
479 |
{ |
|
480 |
return lhs.record() < rhs.record(); |
|
481 |
} |
|
482 | ||
472 | 483 |
DataBuf IptcParser::encode(const IptcData& iptcData) |
473 | 484 |
{ |
474 | 485 |
DataBuf buf(iptcData.size()); |
475 | 486 |
byte *pWrite = buf.pData_; |
476 | 487 | |
477 |
IptcData::const_iterator iter = iptcData.begin(); |
|
478 |
IptcData::const_iterator end = iptcData.end(); |
|
488 |
// Copy the iptc data sets and sort them by record |
|
489 |
IptcMetadata sortedIptcData; |
|
490 |
std::copy(iptcData.begin(), iptcData.end(), std::back_inserter(sortedIptcData)); |
|
491 |
std::sort(sortedIptcData.begin(), sortedIptcData.end(), cmpIptcdataByRecord); |
|
492 | ||
493 |
IptcData::const_iterator iter = sortedIptcData.begin(); |
|
494 |
IptcData::const_iterator end = sortedIptcData.end(); |
|
479 | 495 |
for ( ; iter != end; ++iter) { |
480 | 496 |
// marker, record Id, dataset num |
481 | 497 |
*pWrite++ = marker_; |