source: src/LinkedCell/LinkedCell_Model_changeModel.hpp@ 13e5be

stable v1.7.0
Last change on this file since 13e5be 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
Line 
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
24class TesselPoint;
25
26namespace 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 */
33 class LinkedCell_Model::changeModel : public Observable
34 {
35 //!> grant LinkedCell_ModelTest test access to queue
36 friend class ::LinkedCell_ModelTest;
37 public:
38
39 explicit changeModel(const double distance);
40 ~changeModel();
41
42 void addUpdate(
43 const TesselPoint *Walker,
44 const Update::PriorityLevel priority,
45 boost::function<void (const TesselPoint *)> _updateMethod,
46 const std::string name=""
47 );
48
49 void removeUpdates(const TesselPoint *Walker);
50 private:
51 //!> grant LinkedCell_Model access to bind LinkedCellArrayCache to update funcation
52 friend class LinkedCell_Model;
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.