# HG changeset patch # User Chris Cannam # Date 1534175129 -3600 # Node ID 9d37c8cf96860cb5dea530cad363b42f18598f11 # Parent 68a0abfe7263ffff196f845c7dbe01c892f6a8c3 Provide model id diff -r 68a0abfe7263 -r 9d37c8cf9686 data/model/Model.cpp --- 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) { diff -r 68a0abfe7263 -r 9d37c8cf9686 data/model/Model.h --- 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 #include @@ -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