File: marks.cpp

package info (click to toggle)
glogg 0.9.0-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 832 kB
  • sloc: cpp: 6,649; sh: 66; perl: 32; sed: 25; makefile: 11
file content (79 lines) | stat: -rw-r--r-- 2,056 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
 * 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 <http://www.gnu.org/licenses/>.
 */

#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<Mark> >( 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;
    }
}

qint64 Marks::getMark( QChar mark ) const
{
}

bool Marks::isLineMarked( qint64 line ) const
{
    int index;
    return lookupLineNumber< QList<Mark> >( marks_, line, &index );
}

void Marks::deleteMark( QChar mark )
{
}

void Marks::deleteMark( qint64 line )
{
    int index;

    if ( lookupLineNumber< QList<Mark> >( marks_, line, &index ) )
    {
        marks_.removeAt( index );
    }
}

void Marks::clear()
{
    marks_.clear();
}