annotate base/Debug.cpp @ 1008:d9e0e59a1581

When using an aggregate model to pass data to a transform, zero-pad the shorter input to the duration of the longer rather than truncating the longer. (This is better behaviour for e.g. MATCH, and in any case the code was previously truncating incorrectly and ending up with garbage data at the end.)
author Chris Cannam
date Fri, 14 Nov 2014 13:51:33 +0000
parents e8e6c4e7437b
children c49d52386cde
rev   line source
Chris@685 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@685 2
Chris@685 3 /*
Chris@685 4 Sonic Visualiser
Chris@685 5 An audio file viewer and annotation editor.
Chris@685 6 Centre for Digital Music, Queen Mary, University of London.
Chris@685 7 This file copyright 2010-2011 Chris Cannam and QMUL.
Chris@685 8
Chris@685 9 This program is free software; you can redistribute it and/or
Chris@685 10 modify it under the terms of the GNU General Public License as
Chris@685 11 published by the Free Software Foundation; either version 2 of the
Chris@685 12 License, or (at your option) any later version. See the file
Chris@685 13 COPYING included with this distribution for more information.
Chris@685 14 */
Chris@685 15
Chris@685 16 #include "Debug.h"
Chris@685 17 #include "ResourceFinder.h"
Chris@685 18
Chris@685 19 #include <QString>
Chris@685 20 #include <QUrl>
Chris@685 21 #include <QMutex>
Chris@685 22 #include <QMutexLocker>
Chris@685 23 #include <QFile>
Chris@685 24 #include <QDir>
Chris@685 25 #include <QCoreApplication>
Chris@685 26 #include <QDateTime>
Chris@950 27 #include <QThreadStorage>
Chris@685 28
Chris@685 29 #include <cstdio>
Chris@685 30
Chris@950 31 static QThreadStorage<QDebug *> debugs;
Chris@950 32 static QMutex mutex;
Chris@950 33 static char *prefix = 0;
Chris@950 34
Chris@685 35 QDebug &
Chris@685 36 getSVDebug()
Chris@685 37 {
Chris@685 38 mutex.lock();
Chris@938 39
Chris@950 40 QDebug *debug = 0;
Chris@950 41
Chris@951 42 QString pfx = ResourceFinder().getUserResourcePrefix();
Chris@951 43 QDir logdir(QString("%1/%2").arg(pfx).arg("log"));
Chris@951 44
Chris@950 45 if (!prefix) {
Chris@986 46 prefix = strdup(QString("[%1]")
Chris@986 47 .arg(QCoreApplication::applicationPid())
Chris@986 48 .toLatin1().data());
Chris@956 49 //!!! what to do if mkpath fails?
Chris@685 50 if (!logdir.exists()) logdir.mkpath(logdir.path());
Chris@951 51 }
Chris@951 52
Chris@951 53 if (!debugs.hasLocalData()) {
Chris@951 54 QFile *logFile = new QFile(logdir.path() + "/sv-debug.log");
Chris@951 55 if (logFile->open(QIODevice::WriteOnly | QIODevice::Append)) {
Chris@685 56 QDebug(QtDebugMsg) << (const char *)prefix
Chris@685 57 << "Opened debug log file "
Chris@685 58 << logFile->fileName();
Chris@951 59 debug = new QDebug(logFile);
Chris@685 60 } else {
Chris@685 61 QDebug(QtWarningMsg) << (const char *)prefix
Chris@685 62 << "Failed to open debug log file "
Chris@685 63 << logFile->fileName()
Chris@685 64 << " for writing, using console debug instead";
Chris@685 65 delete logFile;
Chris@685 66 logFile = 0;
Chris@950 67 debug = new QDebug(QtDebugMsg);
Chris@950 68 }
Chris@950 69 debugs.setLocalData(debug);
Chris@685 70 *debug << endl << (const char *)prefix << "Log started at "
Chris@685 71 << QDateTime::currentDateTime().toString();
Chris@951 72 } else {
Chris@951 73 debug = debugs.localData();
Chris@685 74 }
Chris@685 75
Chris@950 76 mutex.unlock();
Chris@950 77
Chris@685 78 QDebug &dref = *debug;
Chris@938 79 dref << endl << (const char *)prefix;
Chris@938 80
Chris@938 81 return dref;
Chris@685 82 }
Chris@685 83
Chris@685 84 QDebug &
Chris@685 85 operator<<(QDebug &dbg, const std::string &s)
Chris@685 86 {
Chris@685 87 dbg << QString::fromUtf8(s.c_str());
Chris@685 88 return dbg;
Chris@685 89 }
Chris@685 90
Chris@685 91 std::ostream &
Chris@685 92 operator<<(std::ostream &target, const QString &str)
Chris@685 93 {
Chris@846 94 return target << str.toStdString();
Chris@685 95 }
Chris@685 96
Chris@685 97 std::ostream &
Chris@685 98 operator<<(std::ostream &target, const QUrl &u)
Chris@685 99 {
Chris@846 100 return target << "<" << u.toString().toStdString() << ">";
Chris@685 101 }
Chris@685 102