Candidate_v1.7.0
stable
|
Last change
on this file since 9f55b9 was f3eb6a, checked in by Frederik Heber <frederik.heber@…>, 5 years ago |
|
FIX: LinkedCell_model executes deletes right away.
- we use the memory address as key in the queue map. If an atom is removed and
another new one happens to land at the same address, this will confuse the
queue and end in an assertion failure as the update will be overriden and the
atom is already present.
|
-
Property mode
set to
100644
|
|
File size:
1.5 KB
|
| Rev | Line | |
|---|
| [e776dc] | 1 | /*
|
|---|
| 2 | * LinkedCell_Model_changeModel.hpp
|
|---|
| 3 | *
|
|---|
| 4 | * Created on: Dec 20, 2011
|
|---|
| 5 | * Author: heber
|
|---|
| 6 | */
|
|---|
| 7 |
|
|---|
| 8 | #ifndef LINKEDCELL_MODEL_CHANGEMODEL_HPP_
|
|---|
| 9 | #define LINKEDCELL_MODEL_CHANGEMODEL_HPP_
|
|---|
| 10 |
|
|---|
| 11 | // include config.h
|
|---|
| 12 | #ifdef HAVE_CONFIG_H
|
|---|
| 13 | #include <config.h>
|
|---|
| 14 | #endif
|
|---|
| 15 |
|
|---|
| 16 | #include <boost/function.hpp>
|
|---|
| 17 | #include <map>
|
|---|
| 18 |
|
|---|
| 19 | #include "CodePatterns/Observer/Observable.hpp"
|
|---|
| 20 |
|
|---|
| 21 | #include "LinkedCell_Model.hpp"
|
|---|
| 22 | #include "LinkedCell_Model_Update.hpp"
|
|---|
| 23 |
|
|---|
| 24 | class TesselPoint;
|
|---|
| 25 |
|
|---|
| 26 | namespace LinkedCell {
|
|---|
| 27 |
|
|---|
| 28 | /** This structures encapsulates changes occuring to the model.
|
|---|
| 29 | *
|
|---|
| 30 | * We do this mostly to keep the Observer LinkedCell_Model away from the
|
|---|
| 31 | * Observable which we need for the Cacheable LinkedCell_Model::N.
|
|---|
| 32 | */
|
|---|
| [54f3d1] | 33 | class LinkedCell_Model::changeModel : public Observable
|
|---|
| 34 | {
|
|---|
| 35 | //!> grant LinkedCell_ModelTest test access to queue
|
|---|
| 36 | friend class ::LinkedCell_ModelTest;
|
|---|
| [e776dc] | 37 | public:
|
|---|
| [54f3d1] | 38 |
|
|---|
| [e776dc] | 39 | explicit changeModel(const double distance);
|
|---|
| 40 | ~changeModel();
|
|---|
| 41 |
|
|---|
| 42 | void addUpdate(
|
|---|
| 43 | const TesselPoint *Walker,
|
|---|
| 44 | const Update::PriorityLevel priority,
|
|---|
| [ef0f8f] | 45 | boost::function<void (const TesselPoint *)> _updateMethod,
|
|---|
| 46 | const std::string name=""
|
|---|
| [e776dc] | 47 | );
|
|---|
| [f3eb6a] | 48 |
|
|---|
| 49 | void removeUpdates(const TesselPoint *Walker);
|
|---|
| [8c31865] | 50 | private:
|
|---|
| 51 | //!> grant LinkedCell_Model access to bind LinkedCellArrayCache to update funcation
|
|---|
| 52 | friend class LinkedCell_Model;
|
|---|
| [e776dc] | 53 | void performUpdates();
|
|---|
| 54 | private:
|
|---|
| 55 | typedef std::map<const TesselPoint *, Update*> UpdateQueueMap;
|
|---|
| 56 | UpdateQueueMap queue;
|
|---|
| 57 | };
|
|---|
| 58 |
|
|---|
| 59 | } // namespace LinkedCell
|
|---|
| 60 |
|
|---|
| 61 |
|
|---|
| 62 | #endif /* LINKEDCELL_MODEL_CHANGEMODEL_HPP_ */
|
|---|
Note:
See
TracBrowser
for help on using the repository browser.