diff data/model/Dense3DModelPeakCache.h @ 545:c603d9439b37

* Add peak cache type for 3d models
author Chris Cannam
date Wed, 04 Feb 2009 13:33:50 +0000
parents
children 95391b480e17
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/model/Dense3DModelPeakCache.h	Wed Feb 04 13:33:50 2009 +0000
@@ -0,0 +1,85 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
+
+/*
+    Sonic Visualiser
+    An audio file viewer and annotation editor.
+    Centre for Digital Music, Queen Mary, University of London.
+    This file copyright 2009 QMUL.
+    
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License as
+    published by the Free Software Foundation; either version 2 of the
+    License, or (at your option) any later version.  See the file
+    COPYING included with this distribution for more information.
+*/
+
+#ifndef _DENSE_3D_MODEL_PEAK_CACHE_H_
+#define _DENSE_3D_MODEL_PEAK_CACHE_H_
+
+#include "DenseThreeDimensionalModel.h"
+#include "EditableDenseThreeDimensionalModel.h"
+#include "base/ResizeableBitset.h"
+
+class Dense3DModelPeakCache : public DenseThreeDimensionalModel
+{
+public:
+    Dense3DModelPeakCache(DenseThreeDimensionalModel *source,
+                          size_t columnsPerPeak);
+    ~Dense3DModelPeakCache();
+
+    virtual size_t getResolution() const {
+        return m_source->getResolution() * m_resolution;
+    }
+
+    virtual size_t getWidth() const {
+        return m_source->getWidth() / m_resolution + 1;
+    }
+
+    virtual size_t getHeight() const {
+        return m_source->getHeight();
+    }
+
+    virtual float getMinimumLevel() const {
+        return m_source->getMinimumLevel();
+    }
+
+    virtual float getMaximumLevel() const {
+        return m_source->getMaximumLevel();
+    }
+
+    virtual bool isColumnAvailable(size_t column) const;
+
+    virtual Column getColumn(size_t column) const;
+
+    virtual float getValueAt(size_t column, size_t n) const;
+
+    virtual QString getBinName(size_t n) const {
+        return m_source->getBinName(n);
+    }
+
+    virtual bool shouldUseLogValueScale() const {
+        return m_source->shouldUseLogValueScale();
+    }
+
+    QString getTypeName() const { return tr("Dense 3-D Peak Cache"); }
+
+    virtual int getCompletion() const {
+        return m_source->getCompletion();
+    }
+
+protected slots:
+    void sourceModelChanged();
+    void sourceModelAboutToBeDeleted();
+
+private:
+    DenseThreeDimensionalModel *m_source;
+    mutable EditableDenseThreeDimensionalModel *m_cache;
+    mutable ResizeableBitset m_coverage;
+    size_t m_resolution;
+
+    bool haveColumn(size_t column) const;
+    void fillColumn(size_t column) const;
+};
+
+
+#endif