changeset 1500:9d37c8cf9686 avoid-pointer-keys

Provide model id
author Chris Cannam
date Mon, 13 Aug 2018 16:45:29 +0100
parents 68a0abfe7263
children a250a54c11cc
files data/model/Model.cpp data/model/Model.h
diffstat 2 files changed, 30 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/data/model/Model.cpp	Mon Aug 13 15:37:41 2018 +0100
+++ b/data/model/Model.cpp	Mon Aug 13 16:45:29 2018 +0100
@@ -40,6 +40,20 @@
     }
 }
 
+int
+Model::getNextId()
+{
+    static int nextId = 0;
+    static QMutex mutex;
+    QMutexLocker locker(&mutex);
+    int i = nextId;
+    if (nextId == INT_MAX) {
+        nextId = INT_MIN;
+    }
+    ++nextId;
+    return i;
+}
+
 void
 Model::setSourceModel(Model *model)
 {
--- a/data/model/Model.h	Mon Aug 13 15:37:41 2018 +0100
+++ b/data/model/Model.h	Mon Aug 13 16:45:29 2018 +0100
@@ -13,8 +13,8 @@
     COPYING included with this distribution for more information.
 */
 
-#ifndef _MODEL_H_
-#define _MODEL_H_
+#ifndef SV_MODEL_H
+#define SV_MODEL_H
 
 #include <vector>
 #include <QObject>
@@ -27,6 +27,8 @@
 class ZoomConstraint;
 class AlignmentModel;
 
+typedef int ModelId;
+
 /** 
  * Model is the base class for all data models that represent any sort
  * of data on a time scale based on an audio frame rate.
@@ -98,6 +100,13 @@
      * Return true if this is a sparse model.
      */
     virtual bool isSparse() const { return false; }
+
+    /**
+     * Return an id for this model. The id is guaranteed to be a
+     * unique identifier for this model among all models that may ever
+     * exist within this single run of the application.
+     */
+    ModelId getId() const { return m_id; }
     
     /**
      * Mark the model as abandoning. This means that the application
@@ -291,7 +300,8 @@
     void aboutToBeDeleted();
 
 protected:
-    Model() : 
+    Model() :
+        m_id(getNextId()),
         m_sourceModel(0), 
         m_alignment(0), 
         m_abandoning(false), 
@@ -301,11 +311,14 @@
     Model(const Model &);
     Model &operator=(const Model &); 
 
+    const ModelId m_id;
     Model *m_sourceModel;
     AlignmentModel *m_alignment;
     QString m_typeUri;
     bool m_abandoning;
     bool m_aboutToDelete;
+
+    int getNextId();
 };
 
 #endif