| 498 | }; |
| 499 | |
| 500 | void CollectedItems::MergeItemsAscendingNamesPass(ItemOrdering &itemOrdering, |
| 501 | NewItems &newItems, const int iPass, size_t endItemsCount, bool force) |
| 502 | { |
| 503 | // Inner loop over ranges of like-named items. |
| 504 | auto rright = newItems.rbegin(); |
| 505 | auto rend = newItems.rend(); |
| 506 | while ( rright != rend ) { |
| 507 | // Find the range |
| 508 | using namespace std::placeholders; |
| 509 | auto rleft = std::find_if( |
| 510 | rright + 1, rend, std::bind( MajorComp, _1, *rright ) ); |
| 511 | |
| 512 | bool success = MergeLikeNamedItems(itemOrdering, |
| 513 | rleft.base(), rright.base(), iPass, endItemsCount, force); |
| 514 | |
| 515 | if ( success ) { |
| 516 | auto diff = rend - rleft; |
| 517 | newItems.erase( rleft.base(), rright.base() ); |
| 518 | rend = newItems.rend(); |
| 519 | rleft = rend - diff; |
| 520 | } |
| 521 | rright = rleft; |
| 522 | } |
| 523 | } |
| 524 | |
| 525 | void CollectedItems::MergeItemsDescendingNamesPass(ItemOrdering &itemOrdering, |
| 526 | NewItems &newItems, const int iPass, size_t endItemsCount, bool force) |