26
26
#include < QString>
27
27
#include < cassert>
28
28
#include < limits>
29
+ #include < utility>
29
30
30
31
#include " utils.h"
31
32
#include " logdata.h"
@@ -180,7 +181,7 @@ void LogFilteredData::addMark( qint64 line, QChar mark )
180
181
int index = marks_.addMark ( line, mark );
181
182
maxLengthMarks_ = qMax ( maxLengthMarks_,
182
183
sourceLogData_->getLineLength ( line ) );
183
- insertIntoFilteredItemsCache ( index, FilteredItem { static_cast <LineNumber>( line ), Mark } );
184
+ insertIntoFilteredItemsCache ( index, { static_cast <LineNumber>( line ), Mark } );
184
185
}
185
186
else
186
187
LOG (logERROR) << " LogFilteredData::addMark\
@@ -237,15 +238,15 @@ void LogFilteredData::deleteMark( QChar mark )
237
238
}
238
239
239
240
updateMaxLengthMarks ( line );
240
- removeFromFilteredItemsCache ( index, FilteredItem { static_cast <LineNumber>( line ), Mark } );
241
+ removeFromFilteredItemsCache ( index, { static_cast <LineNumber>( line ), Mark } );
241
242
}
242
243
243
244
void LogFilteredData::deleteMark ( qint64 line )
244
245
{
245
246
int index = marks_.deleteMark ( line );
246
247
247
248
updateMaxLengthMarks ( line );
248
- removeFromFilteredItemsCache ( index, FilteredItem { static_cast <LineNumber>( line ), Mark } );
249
+ removeFromFilteredItemsCache ( index, { static_cast <LineNumber>( line ), Mark } );
249
250
}
250
251
251
252
void LogFilteredData::updateMaxLengthMarks ( qint64 removed_line )
@@ -479,13 +480,13 @@ void LogFilteredData::regenerateFilteredItemsCache() const
479
480
line = next_match;
480
481
++i;
481
482
}
482
- filteredItemsCache_.push_back ( FilteredItem ( line, type ) );
483
+ filteredItemsCache_.emplace_back ( line, type );
483
484
}
484
485
485
486
LOG (logDEBUG) << " finished regenerateFilteredItemsCache" ;
486
487
}
487
488
488
- void LogFilteredData::insertIntoFilteredItemsCache ( size_t insert_index, FilteredItem item )
489
+ void LogFilteredData::insertIntoFilteredItemsCache ( size_t insert_index, FilteredItem && item )
489
490
{
490
491
using std::begin;
491
492
using std::end;
@@ -501,16 +502,16 @@ void LogFilteredData::insertIntoFilteredItemsCache( size_t insert_index, Filtere
501
502
// We can start the search from insert_index, since lineNumber >= index is always true.
502
503
auto found = std::lower_bound ( next ( begin ( filteredItemsCache_ ), insert_index ), end ( filteredItemsCache_ ), item );
503
504
if ( found == end ( filteredItemsCache_ ) || found->lineNumber () > item.lineNumber () ) {
504
- filteredItemsCache_.insert ( found, item );
505
+ filteredItemsCache_.emplace ( found, std::move ( item ) );
505
506
} else {
506
- assert ( found->lineNumber () == item.lineNumber () );
507
+ Q_ASSERT ( found->lineNumber () == item.lineNumber () );
507
508
found->add ( item.type () );
508
509
}
509
510
}
510
511
511
- void LogFilteredData::insertIntoFilteredItemsCache ( FilteredItem item )
512
+ void LogFilteredData::insertIntoFilteredItemsCache ( FilteredItem && item )
512
513
{
513
- insertIntoFilteredItemsCache ( 0 , item );
514
+ return insertIntoFilteredItemsCache ( 0 , std::move ( item ) );
514
515
}
515
516
516
517
void LogFilteredData::insertMatchesIntoFilteredItemsCache ( size_t start_index )
@@ -537,21 +538,19 @@ void LogFilteredData::insertMatchesIntoFilteredItemsCache( size_t start_index )
537
538
// We can start the search from insert_index, since lineNumber >= index is always true.
538
539
auto filteredIt = next ( begin ( filteredItemsCache_ ), start_index );
539
540
for ( auto matchesIt = next ( begin ( matching_lines_ ), start_index ); matchesIt != end ( matching_lines_ ); ++matchesIt ) {
540
- FilteredItem item{ matchesIt->lineNumber (), Match };
541
- filteredIt = std::lower_bound ( filteredIt, end ( filteredItemsCache_ ), item );
542
- if ( filteredIt == end ( filteredItemsCache_ ) || filteredIt->lineNumber () > item.lineNumber () ) {
543
- filteredIt = filteredItemsCache_.insert ( filteredIt, item );
541
+ filteredIt = std::lower_bound ( filteredIt, end ( filteredItemsCache_ ), matchesIt->lineNumber () );
542
+ if ( filteredIt == end ( filteredItemsCache_ ) || filteredIt->lineNumber () > matchesIt->lineNumber () ) {
543
+ filteredIt = filteredItemsCache_.emplace ( filteredIt, matchesIt->lineNumber (), Match );
544
544
} else {
545
545
assert ( filteredIt->lineNumber () == matchesIt->lineNumber () );
546
- filteredIt->add ( item. type () );
546
+ filteredIt->add ( Match );
547
547
}
548
548
}
549
549
}
550
550
551
- void LogFilteredData::removeFromFilteredItemsCache ( size_t remove_index, FilteredItem item )
551
+ void LogFilteredData::removeFromFilteredItemsCache ( size_t remove_index, const FilteredItem & item )
552
552
{
553
553
using std::begin;
554
- using std::distance;
555
554
using std::end;
556
555
using std::next;
557
556
@@ -565,21 +564,26 @@ void LogFilteredData::removeFromFilteredItemsCache( size_t remove_index, Filtere
565
564
// Search for the corresponding index.
566
565
// We can start the search from remove_index, since lineNumber >= index is always true.
567
566
auto found = std::equal_range ( next ( begin ( filteredItemsCache_ ), remove_index ), end ( filteredItemsCache_ ), item );
568
- if ( found.first == end ( filteredItemsCache_ ) ) {
567
+ if ( found.first == found. second ) {
569
568
LOG (logERROR) << " Attempt to remove line " << item.lineNumber () << " from filteredItemsCache_ failed, since it was not found" ;
570
569
return ;
571
570
}
572
571
573
- if ( distance ( found.first , found. second ) > 1 ) {
572
+ if ( next ( found.first ) != found. second ) {
574
573
LOG (logERROR) << " Multiple matches found for line " << item.lineNumber () << " in filteredItemsCache_" ;
575
574
// FIXME: collapse them?
576
575
}
577
576
578
- if ( !found.first ->remove ( item.type () ) ){
577
+ if ( !found.first ->remove ( item.type () ) ) {
579
578
filteredItemsCache_.erase ( found.first );
580
579
}
581
580
}
582
581
582
+ void LogFilteredData::removeFromFilteredItemsCache ( const FilteredItem &item )
583
+ {
584
+ removeFromFilteredItemsCache ( 0 , item );
585
+ }
586
+
583
587
void LogFilteredData::removeAllFromFilteredItemsCache ( FilteredLineType type )
584
588
{
585
589
using std::begin;
0 commit comments