Mercurial > hg > svcore
changeset 1506:a250a54c11cc
Merge from branch avoid-pointer-keys
author | Chris Cannam |
---|---|
date | Tue, 04 Sep 2018 11:31:35 +0100 |
parents | d7fdc77252c6 (current diff) 9d37c8cf9686 (diff) |
children | fe579dc6a713 b7cb203ee344 |
files | |
diffstat | 2 files changed, 30 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/data/model/Model.cpp Mon Sep 03 16:15:03 2018 +0100 +++ b/data/model/Model.cpp Tue Sep 04 11:31:35 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 Sep 03 16:15:03 2018 +0100 +++ b/data/model/Model.h Tue Sep 04 11:31:35 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