annotate base/Clipboard.cpp @ 1610:7db29268cf4c single-point

Bitfield + reorder for packing
author Chris Cannam
date Tue, 05 Mar 2019 14:18:37 +0000
parents 31f01931b781
children b2f32c554199
rev   line source
Chris@74 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@74 2
Chris@74 3 /*
Chris@74 4 Sonic Visualiser
Chris@74 5 An audio file viewer and annotation editor.
Chris@74 6 Centre for Digital Music, Queen Mary, University of London.
Chris@74 7 This file copyright 2006 Chris Cannam.
Chris@74 8
Chris@74 9 This program is free software; you can redistribute it and/or
Chris@74 10 modify it under the terms of the GNU General Public License as
Chris@74 11 published by the Free Software Foundation; either version 2 of the
Chris@74 12 License, or (at your option) any later version. See the file
Chris@74 13 COPYING included with this distribution for more information.
Chris@74 14 */
Chris@74 15
Chris@74 16 #include "Clipboard.h"
Chris@74 17
Chris@1044 18 Clipboard::Point::Point(sv_frame_t frame, QString label) :
Chris@1610 19 m_haveValue(false),
Chris@1610 20 m_haveLevel(false),
Chris@74 21 m_haveFrame(true),
Chris@1610 22 m_haveDuration(false),
Chris@1610 23 m_haveReferenceFrame(false),
Chris@1610 24 m_haveLabel(true),
Chris@1610 25 m_value(0),
Chris@1610 26 m_level(0.f),
Chris@74 27 m_frame(frame),
Chris@955 28 m_duration(0),
Chris@1610 29 m_referenceFrame(frame),
Chris@1610 30 m_label(label)
Chris@74 31 {
Chris@74 32 }
Chris@74 33
Chris@1044 34 Clipboard::Point::Point(sv_frame_t frame, float value, QString label) :
Chris@1610 35 m_haveValue(true),
Chris@1610 36 m_haveLevel(false),
Chris@74 37 m_haveFrame(true),
Chris@1610 38 m_haveDuration(false),
Chris@1610 39 m_haveReferenceFrame(false),
Chris@1610 40 m_haveLabel(true),
Chris@1610 41 m_value(value),
Chris@1610 42 m_level(0.f),
Chris@74 43 m_frame(frame),
Chris@955 44 m_duration(0),
Chris@1610 45 m_referenceFrame(frame),
Chris@1610 46 m_label(label)
Chris@74 47 {
Chris@74 48 }
Chris@74 49
Chris@1044 50 Clipboard::Point::Point(sv_frame_t frame, float value, sv_frame_t duration, QString label) :
Chris@1610 51 m_haveValue(true),
Chris@1610 52 m_haveLevel(false),
Chris@74 53 m_haveFrame(true),
Chris@1610 54 m_haveDuration(true),
Chris@1610 55 m_haveReferenceFrame(false),
Chris@1610 56 m_haveLabel(true),
Chris@1610 57 m_value(value),
Chris@1610 58 m_level(0.f),
Chris@74 59 m_frame(frame),
Chris@74 60 m_duration(duration),
Chris@1610 61 m_referenceFrame(frame),
Chris@1610 62 m_label(label)
Chris@340 63 {
Chris@340 64 }
Chris@340 65
Chris@1044 66 Clipboard::Point::Point(sv_frame_t frame, float value, sv_frame_t duration, float level, QString label) :
Chris@1610 67 m_haveValue(true),
Chris@1610 68 m_haveLevel(true),
Chris@340 69 m_haveFrame(true),
Chris@1610 70 m_haveDuration(true),
Chris@1610 71 m_haveReferenceFrame(false),
Chris@1610 72 m_haveLabel(true),
Chris@1610 73 m_value(value),
Chris@1610 74 m_level(level),
Chris@340 75 m_frame(frame),
Chris@340 76 m_duration(duration),
Chris@1610 77 m_referenceFrame(frame),
Chris@1610 78 m_label(label)
Chris@74 79 {
Chris@74 80 }
Chris@74 81
Chris@74 82 bool
Chris@74 83 Clipboard::Point::haveFrame() const
Chris@74 84 {
Chris@74 85 return m_haveFrame;
Chris@74 86 }
Chris@74 87
Chris@1044 88 sv_frame_t
Chris@74 89 Clipboard::Point::getFrame() const
Chris@74 90 {
Chris@74 91 return m_frame;
Chris@74 92 }
Chris@74 93
Chris@872 94 Clipboard::Point
Chris@1044 95 Clipboard::Point::withFrame(sv_frame_t frame) const
Chris@872 96 {
Chris@872 97 Point p(*this);
Chris@872 98 p.m_haveFrame = true;
Chris@872 99 p.m_frame = frame;
Chris@872 100 return p;
Chris@872 101 }
Chris@872 102
Chris@74 103 bool
Chris@74 104 Clipboard::Point::haveValue() const
Chris@74 105 {
Chris@74 106 return m_haveValue;
Chris@74 107 }
Chris@74 108
Chris@74 109 float
Chris@74 110 Clipboard::Point::getValue() const
Chris@74 111 {
Chris@74 112 return m_value;
Chris@74 113 }
Chris@74 114
Chris@872 115 Clipboard::Point
Chris@872 116 Clipboard::Point::withValue(float value) const
Chris@872 117 {
Chris@872 118 Point p(*this);
Chris@872 119 p.m_haveValue = true;
Chris@872 120 p.m_value = value;
Chris@872 121 return p;
Chris@872 122 }
Chris@872 123
Chris@74 124 bool
Chris@74 125 Clipboard::Point::haveDuration() const
Chris@74 126 {
Chris@74 127 return m_haveDuration;
Chris@74 128 }
Chris@74 129
Chris@1044 130 sv_frame_t
Chris@74 131 Clipboard::Point::getDuration() const
Chris@74 132 {
Chris@74 133 return m_duration;
Chris@74 134 }
Chris@74 135
Chris@872 136 Clipboard::Point
Chris@1044 137 Clipboard::Point::withDuration(sv_frame_t duration) const
Chris@872 138 {
Chris@872 139 Point p(*this);
Chris@872 140 p.m_haveDuration = true;
Chris@872 141 p.m_duration = duration;
Chris@872 142 return p;
Chris@872 143 }
Chris@872 144
Chris@74 145 bool
Chris@74 146 Clipboard::Point::haveLabel() const
Chris@74 147 {
Chris@74 148 return m_haveLabel;
Chris@74 149 }
Chris@74 150
Chris@74 151 QString
Chris@74 152 Clipboard::Point::getLabel() const
Chris@74 153 {
Chris@74 154 return m_label;
Chris@74 155 }
Chris@74 156
Chris@872 157 Clipboard::Point
Chris@872 158 Clipboard::Point::withLabel(QString label) const
Chris@872 159 {
Chris@872 160 Point p(*this);
Chris@872 161 p.m_haveLabel = true;
Chris@872 162 p.m_label = label;
Chris@872 163 return p;
Chris@872 164 }
Chris@872 165
Chris@340 166 bool
Chris@340 167 Clipboard::Point::haveLevel() const
Chris@340 168 {
Chris@340 169 return m_haveLevel;
Chris@340 170 }
Chris@340 171
Chris@340 172 float
Chris@340 173 Clipboard::Point::getLevel() const
Chris@340 174 {
Chris@340 175 return m_level;
Chris@340 176 }
Chris@340 177
Chris@872 178 Clipboard::Point
Chris@872 179 Clipboard::Point::withLevel(float level) const
Chris@872 180 {
Chris@872 181 Point p(*this);
Chris@872 182 p.m_haveLevel = true;
Chris@872 183 p.m_level = level;
Chris@872 184 return p;
Chris@872 185 }
Chris@872 186
Chris@340 187 bool
Chris@370 188 Clipboard::Point::haveReferenceFrame() const
Chris@340 189 {
Chris@370 190 return m_haveReferenceFrame;
Chris@370 191 }
Chris@370 192
Chris@370 193 bool
Chris@370 194 Clipboard::Point::referenceFrameDiffers() const
Chris@370 195 {
Chris@370 196 return m_haveReferenceFrame && (m_referenceFrame != m_frame);
Chris@340 197 }
Chris@340 198
Chris@1044 199 sv_frame_t
Chris@340 200 Clipboard::Point::getReferenceFrame() const
Chris@340 201 {
Chris@340 202 return m_referenceFrame;
Chris@340 203 }
Chris@340 204
Chris@340 205 void
Chris@1044 206 Clipboard::Point::setReferenceFrame(sv_frame_t f)
Chris@340 207 {
Chris@370 208 m_haveReferenceFrame = true;
Chris@340 209 m_referenceFrame = f;
Chris@340 210 }
Chris@340 211
Chris@74 212 Clipboard::Clipboard() { }
Chris@74 213 Clipboard::~Clipboard() { }
Chris@74 214
Chris@74 215 void
Chris@74 216 Clipboard::clear()
Chris@74 217 {
Chris@74 218 m_points.clear();
Chris@74 219 }
Chris@74 220
Chris@74 221 bool
Chris@74 222 Clipboard::empty() const
Chris@74 223 {
Chris@74 224 return m_points.empty();
Chris@74 225 }
Chris@74 226
Chris@74 227 const Clipboard::PointList &
Chris@74 228 Clipboard::getPoints() const
Chris@74 229 {
Chris@74 230 return m_points;
Chris@74 231 }
Chris@74 232
Chris@74 233 void
Chris@74 234 Clipboard::setPoints(const PointList &pl)
Chris@74 235 {
Chris@74 236 m_points = pl;
Chris@74 237 }
Chris@74 238
Chris@74 239 void
Chris@74 240 Clipboard::addPoint(const Point &point)
Chris@74 241 {
Chris@74 242 m_points.push_back(point);
Chris@74 243 }
Chris@74 244
Chris@340 245 bool
Chris@370 246 Clipboard::haveReferenceFrames() const
Chris@370 247 {
Chris@370 248 for (PointList::const_iterator i = m_points.begin();
Chris@370 249 i != m_points.end(); ++i) {
Chris@370 250 if (i->haveReferenceFrame()) return true;
Chris@370 251 }
Chris@370 252 return false;
Chris@370 253 }
Chris@370 254
Chris@370 255 bool
Chris@369 256 Clipboard::referenceFramesDiffer() const
Chris@340 257 {
Chris@340 258 for (PointList::const_iterator i = m_points.begin();
Chris@340 259 i != m_points.end(); ++i) {
Chris@370 260 if (i->referenceFrameDiffers()) return true;
Chris@340 261 }
Chris@340 262 return false;
Chris@340 263 }
Chris@340 264