/*
* Copyright (C) 2011 Nicolas Bonnefon and other contributors
*
* This file is part of glogg.
*
* glogg is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* glogg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with glogg. If not, see .
*/
#include "marks.h"
#include "log.h"
#include "utils.h"
// This file implements the list of marks for a file.
// It is implemented as a QList which is kept in order when inserting,
// it is simpler than something fancy like a heap, and insertion are
// not done very often anyway. Oh and we need to iterate through the
// list, disqualifying a straight heap.
Marks::Marks() : marks_()
{
}
void Marks::addMark( qint64 line, QChar mark )
{
// Look for the index immediately before
int index;
if ( ! lookupLineNumber< QList >( marks_, line, &index ) )
{
// If a mark is not already set for this line
LOG(logDEBUG) << "Inserting mark at line " << line
<< " (index " << index << ")";
marks_.insert( index, Mark( line ) );
}
else
{
LOG(logERROR) << "Trying to add an existing mark at line " << line;
}
// 'mark' is not used yet
mark = mark;
}
qint64 Marks::getMark( QChar mark ) const
{
// 'mark' is not used yet
mark = mark;
return 0;
}
bool Marks::isLineMarked( qint64 line ) const
{
int index;
return lookupLineNumber< QList >( marks_, line, &index );
}
void Marks::deleteMark( QChar mark )
{
// 'mark' is not used yet
mark = mark;
}
void Marks::deleteMark( qint64 line )
{
int index;
if ( lookupLineNumber< QList >( marks_, line, &index ) )
{
marks_.removeAt( index );
}
}
void Marks::clear()
{
marks_.clear();
}