annotate transform/Transform.h @ 201:de783e8ee5f0

* Hoist alignment model set/query up to Model, so any models can be aligned * Add Model::aboutToDelete and aboutToBeDeleted for management of models that are contained by or referred to by other models instead of only the document
author Chris Cannam
date Wed, 24 Oct 2007 15:21:38 +0000
parents b4110b17bca8
children
rev   line source
Chris@0 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@0 2
Chris@0 3 /*
Chris@0 4 Sonic Visualiser
Chris@0 5 An audio file viewer and annotation editor.
Chris@0 6 Centre for Digital Music, Queen Mary, University of London.
Chris@0 7 This file copyright 2006 Chris Cannam.
Chris@0 8
Chris@0 9 This program is free software; you can redistribute it and/or
Chris@0 10 modify it under the terms of the GNU General Public License as
Chris@0 11 published by the Free Software Foundation; either version 2 of the
Chris@0 12 License, or (at your option) any later version. See the file
Chris@0 13 COPYING included with this distribution for more information.
Chris@0 14 */
Chris@0 15
Chris@0 16 #ifndef _TRANSFORM_H_
Chris@0 17 #define _TRANSFORM_H_
Chris@0 18
Chris@1 19 #include "base/Thread.h"
Chris@0 20
Chris@1 21 #include "data/model/Model.h"
Chris@0 22
Chris@107 23 typedef QString TransformId;
Chris@0 24
Chris@0 25 /**
Chris@0 26 * A Transform turns one data model into another.
Chris@0 27 *
Chris@0 28 * Typically in this application, a Transform might have a
Chris@0 29 * DenseTimeValueModel as its input (e.g. an audio waveform) and a
Chris@0 30 * SparseOneDimensionalModel (e.g. detected beats) as its output.
Chris@0 31 *
Chris@0 32 * The Transform typically runs in the background, as a separate
Chris@0 33 * thread populating the output model. The model is available to the
Chris@0 34 * user of the Transform immediately, but may be initially empty until
Chris@0 35 * the background thread has populated it.
Chris@0 36 */
Chris@0 37
Chris@0 38 class Transform : public Thread
Chris@0 39 {
Chris@0 40 public:
Chris@0 41 virtual ~Transform();
Chris@0 42
Chris@118 43 // Just a hint to the processing thread that it should give up.
Chris@118 44 // Caller should still wait() and/or delete the transform before
Chris@118 45 // assuming its input and output models are no longer required.
Chris@118 46 void abandon() { m_abandoned = true; }
Chris@118 47
Chris@0 48 Model *getInputModel() { return m_input; }
Chris@0 49 Model *getOutputModel() { return m_output; }
Chris@0 50 Model *detachOutputModel() { m_detached = true; return m_output; }
Chris@0 51
Chris@0 52 protected:
Chris@0 53 Transform(Model *m);
Chris@0 54
Chris@0 55 Model *m_input; // I don't own this
Chris@0 56 Model *m_output; // I own this, unless...
Chris@0 57 bool m_detached; // ... this is true.
Chris@118 58 bool m_abandoned;
Chris@0 59 };
Chris@0 60
Chris@0 61 #endif