comparison data/model/NoteModel.cpp @ 147:3a13b0d4934e

* Reorganising code base. This revision will not compile.
author Chris Cannam
date Mon, 31 Jul 2006 11:44:37 +0000
parents
children dc46851837d6
comparison
equal deleted inserted replaced
146:f90fad823cea 147:3a13b0d4934e
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2
3 /*
4 Sonic Visualiser
5 An audio file viewer and annotation editor.
6 Centre for Digital Music, Queen Mary, University of London.
7 This file copyright 2006 Chris Cannam.
8
9 This program is free software; you can redistribute it and/or
10 modify it under the terms of the GNU General Public License as
11 published by the Free Software Foundation; either version 2 of the
12 License, or (at your option) any later version. See the file
13 COPYING included with this distribution for more information.
14 */
15
16 #include "NoteModel.h"
17
18 NoteModel::PointList
19 NoteModel::getPoints(long start, long end) const
20 {
21 if (start > end) return PointList();
22 QMutexLocker locker(&m_mutex);
23
24 Note endPoint(end);
25
26 PointListIterator endItr = m_points.upper_bound(endPoint);
27
28 if (endItr != m_points.end()) ++endItr;
29 if (endItr != m_points.end()) ++endItr;
30
31 PointList rv;
32
33 for (PointListIterator i = endItr; i != m_points.begin(); ) {
34 --i;
35 if (i->frame < start) {
36 if (i->frame + i->duration >= start) {
37 rv.insert(*i);
38 }
39 } else if (i->frame <= end) {
40 rv.insert(*i);
41 }
42 }
43
44 return rv;
45 }
46
47 NoteModel::PointList
48 NoteModel::getPoints(long frame) const
49 {
50 QMutexLocker locker(&m_mutex);
51
52 if (m_resolution == 0) return PointList();
53
54 long start = (frame / m_resolution) * m_resolution;
55 long end = start + m_resolution;
56
57 Note endPoint(end);
58
59 PointListIterator endItr = m_points.upper_bound(endPoint);
60
61 PointList rv;
62
63 for (PointListIterator i = endItr; i != m_points.begin(); ) {
64 --i;
65 if (i->frame < start) {
66 if (i->frame + i->duration >= start) {
67 rv.insert(*i);
68 }
69 } else if (i->frame <= end) {
70 rv.insert(*i);
71 }
72 }
73
74 return rv;
75 }