Skip to content

Commit 0e73a3d

Browse files
committed
Refactor src/data/logfiltereddata.cpp
1 parent 70538f4 commit 0e73a3d

File tree

2 files changed

+29
-28
lines changed

2 files changed

+29
-28
lines changed

src/data/logfiltereddata.cpp

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <QString>
2727
#include <cassert>
2828
#include <limits>
29+
#include <utility>
2930

3031
#include "utils.h"
3132
#include "logdata.h"
@@ -180,7 +181,7 @@ void LogFilteredData::addMark( qint64 line, QChar mark )
180181
int index = marks_.addMark( line, mark );
181182
maxLengthMarks_ = qMax( maxLengthMarks_,
182183
sourceLogData_->getLineLength( line ) );
183-
insertIntoFilteredItemsCache( index, FilteredItem{ static_cast<LineNumber>( line ), Mark } );
184+
insertIntoFilteredItemsCache( index, { static_cast<LineNumber>( line ), Mark } );
184185
}
185186
else
186187
LOG(logERROR) << "LogFilteredData::addMark\
@@ -237,15 +238,15 @@ void LogFilteredData::deleteMark( QChar mark )
237238
}
238239

239240
updateMaxLengthMarks( line );
240-
removeFromFilteredItemsCache( index, FilteredItem{ static_cast<LineNumber>( line ), Mark } );
241+
removeFromFilteredItemsCache( index, { static_cast<LineNumber>( line ), Mark } );
241242
}
242243

243244
void LogFilteredData::deleteMark( qint64 line )
244245
{
245246
int index = marks_.deleteMark( line );
246247

247248
updateMaxLengthMarks( line );
248-
removeFromFilteredItemsCache( index, FilteredItem{ static_cast<LineNumber>( line ), Mark } );
249+
removeFromFilteredItemsCache( index, { static_cast<LineNumber>( line ), Mark } );
249250
}
250251

251252
void LogFilteredData::updateMaxLengthMarks( qint64 removed_line )
@@ -479,13 +480,13 @@ void LogFilteredData::regenerateFilteredItemsCache() const
479480
line = next_match;
480481
++i;
481482
}
482-
filteredItemsCache_.push_back( FilteredItem( line, type ) );
483+
filteredItemsCache_.emplace_back( line, type );
483484
}
484485

485486
LOG(logDEBUG) << "finished regenerateFilteredItemsCache";
486487
}
487488

488-
void LogFilteredData::insertIntoFilteredItemsCache( size_t insert_index, FilteredItem item )
489+
void LogFilteredData::insertIntoFilteredItemsCache( size_t insert_index, FilteredItem &&item )
489490
{
490491
using std::begin;
491492
using std::end;
@@ -501,16 +502,16 @@ void LogFilteredData::insertIntoFilteredItemsCache( size_t insert_index, Filtere
501502
// We can start the search from insert_index, since lineNumber >= index is always true.
502503
auto found = std::lower_bound( next( begin( filteredItemsCache_ ), insert_index ), end( filteredItemsCache_ ), item );
503504
if ( found == end( filteredItemsCache_ ) || found->lineNumber() > item.lineNumber() ) {
504-
filteredItemsCache_.insert( found, item );
505+
filteredItemsCache_.emplace( found, std::move( item ) );
505506
} else {
506-
assert( found->lineNumber() == item.lineNumber() );
507+
Q_ASSERT( found->lineNumber() == item.lineNumber() );
507508
found->add( item.type() );
508509
}
509510
}
510511

511-
void LogFilteredData::insertIntoFilteredItemsCache( FilteredItem item )
512+
void LogFilteredData::insertIntoFilteredItemsCache( FilteredItem &&item )
512513
{
513-
insertIntoFilteredItemsCache( 0, item );
514+
return insertIntoFilteredItemsCache( 0, std::move( item ) );
514515
}
515516

516517
void LogFilteredData::insertMatchesIntoFilteredItemsCache( size_t start_index )
@@ -537,21 +538,19 @@ void LogFilteredData::insertMatchesIntoFilteredItemsCache( size_t start_index )
537538
// We can start the search from insert_index, since lineNumber >= index is always true.
538539
auto filteredIt = next( begin( filteredItemsCache_ ), start_index );
539540
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 );
544544
} else {
545545
assert( filteredIt->lineNumber() == matchesIt->lineNumber() );
546-
filteredIt->add( item.type() );
546+
filteredIt->add( Match );
547547
}
548548
}
549549
}
550550

551-
void LogFilteredData::removeFromFilteredItemsCache( size_t remove_index, FilteredItem item )
551+
void LogFilteredData::removeFromFilteredItemsCache( size_t remove_index, const FilteredItem &item )
552552
{
553553
using std::begin;
554-
using std::distance;
555554
using std::end;
556555
using std::next;
557556

@@ -565,21 +564,26 @@ void LogFilteredData::removeFromFilteredItemsCache( size_t remove_index, Filtere
565564
// Search for the corresponding index.
566565
// We can start the search from remove_index, since lineNumber >= index is always true.
567566
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 ) {
569568
LOG(logERROR) << "Attempt to remove line " << item.lineNumber() << " from filteredItemsCache_ failed, since it was not found";
570569
return;
571570
}
572571

573-
if ( distance( found.first, found.second ) > 1 ) {
572+
if ( next( found.first ) != found.second ) {
574573
LOG(logERROR) << "Multiple matches found for line " << item.lineNumber() << " in filteredItemsCache_";
575574
// FIXME: collapse them?
576575
}
577576

578-
if ( !found.first->remove( item.type() ) ){
577+
if ( !found.first->remove( item.type() ) ) {
579578
filteredItemsCache_.erase( found.first );
580579
}
581580
}
582581

582+
void LogFilteredData::removeFromFilteredItemsCache( const FilteredItem &item )
583+
{
584+
removeFromFilteredItemsCache( 0, item );
585+
}
586+
583587
void LogFilteredData::removeAllFromFilteredItemsCache( FilteredLineType type )
584588
{
585589
using std::begin;

src/data/logfiltereddata.h

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -167,14 +167,14 @@ class LogFilteredData : public AbstractLogData {
167167
void regenerateFilteredItemsCache() const;
168168
// start_index can be passed in as an optimization when finding the item.
169169
// It refers to the index of the singular arrays (Marks or SearchResultArray) where the item was inserted.
170-
void insertIntoFilteredItemsCache( size_t start_index, FilteredItem item );
171-
void insertIntoFilteredItemsCache( FilteredItem item );
170+
void insertIntoFilteredItemsCache( size_t start_index, FilteredItem &&item );
171+
void insertIntoFilteredItemsCache( FilteredItem &&item );
172172
// Insert entries from matching_lines_ into filteredItemsCache_ starting by start_index.
173173
void insertMatchesIntoFilteredItemsCache( size_t start_index );
174174
// remove_index can be passed in as an optimization when finding the item.
175175
// It refers to the index of the singular arrays (Marks or SearchResultArray) where the item was removed.
176-
void removeFromFilteredItemsCache( size_t remove_index, FilteredItem item );
177-
void removeFromFilteredItemsCache( FilteredItem item );
176+
void removeFromFilteredItemsCache( size_t remove_index, const FilteredItem &item );
177+
void removeFromFilteredItemsCache( const FilteredItem &item );
178178
void removeAllFromFilteredItemsCache( FilteredLineType type );
179179

180180
// update maxLengthMarks_ when a Mark was removed.
@@ -206,11 +206,8 @@ inline LogFilteredData::FilteredLineType operator~(LogFilteredData::FilteredLine
206206
// of pointer (less small allocations and no RTTI).
207207
class LogFilteredData::FilteredItem {
208208
public:
209-
// A default ctor seems to be necessary for QVector
210-
FilteredItem()
211-
{ lineNumber_ = 0; }
212209
FilteredItem( LineNumber lineNumber, FilteredLineType type )
213-
{ lineNumber_ = lineNumber; type_ = type; }
210+
: lineNumber_{ lineNumber }, type_{ type } {}
214211

215212
LineNumber lineNumber() const
216213
{ return lineNumber_; }
@@ -225,7 +222,7 @@ class LogFilteredData::FilteredItem {
225222
{ return type_ &= ~type; }
226223

227224
bool operator <( const LogFilteredData::FilteredItem& other ) const
228-
{ return lineNumber_ < other.lineNumber_; }
225+
{ return *this < other.lineNumber_; }
229226

230227
bool operator <( const LineNumber& lineNumber ) const
231228
{ return lineNumber_ < lineNumber; }

0 commit comments

Comments
 (0)