annotate data/model/DenseTimeValueModel.cpp @ 1752:6d09d68165a4 by-id

Further review of ById: make IDs only available when adding a model to the ById store, not by querying the item directly. This means any id encountered in the wild must have been added to the store at some point (even if later released), which simplifies reasoning about lifecycles
author Chris Cannam
date Fri, 05 Jul 2019 15:28:07 +0100
parents 77543124651b
children c546429d4c2f
rev   line source
Chris@147 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@147 2
Chris@147 3 /*
Chris@147 4 Sonic Visualiser
Chris@147 5 An audio file viewer and annotation editor.
Chris@147 6 Centre for Digital Music, Queen Mary, University of London.
Chris@147 7 This file copyright 2006 Chris Cannam.
Chris@147 8
Chris@147 9 This program is free software; you can redistribute it and/or
Chris@147 10 modify it under the terms of the GNU General Public License as
Chris@147 11 published by the Free Software Foundation; either version 2 of the
Chris@147 12 License, or (at your option) any later version. See the file
Chris@147 13 COPYING included with this distribution for more information.
Chris@147 14 */
Chris@147 15
Chris@147 16 #include "DenseTimeValueModel.h"
Chris@147 17
Chris@838 18 #include <QStringList>
Chris@1429 19
Chris@838 20 QString
Chris@1679 21 DenseTimeValueModel::toDelimitedDataString(QString delimiter,
Chris@1679 22 DataExportOptions,
Chris@1679 23 sv_frame_t startFrame,
Chris@1679 24 sv_frame_t duration) const
Chris@838 25 {
Chris@929 26 int ch = getChannelCount();
Chris@838 27
Chris@1679 28 if (duration <= 0) return "";
Chris@838 29
Chris@1679 30 auto data = getMultiChannelData(0, ch - 1, startFrame, duration);
Chris@838 31
Chris@1096 32 if (data.empty() || data[0].empty()) return "";
Chris@1096 33
Chris@838 34 QStringList list;
Chris@1096 35 for (sv_frame_t i = 0; in_range_for(data[0], i); ++i) {
Chris@838 36 QStringList parts;
Chris@1679 37 parts << QString("%1").arg(startFrame + i);
Chris@1096 38 for (int c = 0; in_range_for(data, c); ++c) {
Chris@1096 39 parts << QString("%1").arg(data[c][i]);
Chris@838 40 }
Chris@838 41 list << parts.join(delimiter);
Chris@838 42 }
Chris@838 43
Chris@838 44 return list.join("\n");
Chris@838 45 }