Mercurial > hg > svapp
comparison framework/Document.h @ 661:a2bf5e6c54ce single-point
Retain models in registration order, to assist in getting stable file format in load/save
| author | Chris Cannam | 
|---|---|
| date | Tue, 02 Apr 2019 14:32:24 +0100 | 
| parents | 163573a73ebe | 
| children | 351b1302064e | 
   comparison
  equal
  deleted
  inserted
  replaced
| 660:85ada073d2db | 661:a2bf5e6c54ce | 
|---|---|
| 368 | 368 | 
| 369 // This does not use ModelTransformer::Input, because it would | 369 // This does not use ModelTransformer::Input, because it would | 
| 370 // be confusing to have Input objects hanging around with NULL | 370 // be confusing to have Input objects hanging around with NULL | 
| 371 // models in them. | 371 // models in them. | 
| 372 | 372 | 
| 373 Model *model; | |
| 373 const Model *source; | 374 const Model *source; | 
| 374 int channel; | 375 int channel; | 
| 375 Transform transform; | 376 Transform transform; | 
| 376 bool additional; | 377 bool additional; | 
| 377 | 378 | 
| 378 // Count of the number of layers using this model. | 379 // Count of the number of layers using this model. | 
| 379 int refcount; | 380 int refcount; | 
| 380 }; | 381 }; | 
| 381 | 382 | 
| 382 typedef std::map<Model *, ModelRecord> ModelMap; | 383 // This used to be a map<Model *, ModelRecord>, but a vector | 
| 383 ModelMap m_models; | 384 // ensures that models are consistently recorded in order of | 
| 385 // creation rather than at the whim of heap allocation, and that's | |
| 386 // useful for automated testing. We don't expect ever to have so | |
| 387 // many models that there is any significant overhead there. | |
| 388 typedef std::vector<ModelRecord> ModelList; | |
| 389 ModelList m_models; | |
| 390 | |
| 391 ModelList::iterator findModelInList(Model *m) { | |
| 392 for (ModelList::iterator i = m_models.begin(); | |
| 393 i != m_models.end(); ++i) { | |
| 394 if (i->model == m) { | |
| 395 return i; | |
| 396 } | |
| 397 } | |
| 398 return m_models.end(); | |
| 399 } | |
| 400 | |
| 401 void deleteModelFromList(Model *m) { | |
| 402 ModelList keep; | |
| 403 bool found = false; | |
| 404 for (const ModelRecord &rec: m_models) { | |
| 405 if (rec.model == m) { | |
| 406 found = true; | |
| 407 m->aboutToDelete(); | |
| 408 emit modelAboutToBeDeleted(m); | |
| 409 } else { | |
| 410 keep.push_back(rec); | |
| 411 } | |
| 412 } | |
| 413 m_models = keep; | |
| 414 if (found) { | |
| 415 delete m; | |
| 416 } | |
| 417 } | |
| 384 | 418 | 
| 385 /** | 419 /** | 
| 386 * Add an extra derived model (returned at the end of processing a | 420 * Add an extra derived model (returned at the end of processing a | 
| 387 * transform). | 421 * transform). | 
| 388 */ | 422 */ | 
