]> git.mxchange.org Git - simgear.git/blob - simgear/props/AtomicChangeListener.cxx
Melchior FRANZ: fix SGPropertyNode::LAST_USED_ATTRIBUTE
[simgear.git] / simgear / props / AtomicChangeListener.cxx
1
2 #ifdef HAVE_CONFIG_H
3 #  include <simgear_config.h>
4 #endif
5
6 #include "AtomicChangeListener.hxx"
7
8 #include <algorithm>
9 #include <iterator>
10 #include <vector>
11
12 #include <boost/bind.hpp>
13
14 #include <simgear/structure/Singleton.hxx>
15
16 namespace simgear
17 {
18 using namespace std;
19
20 MultiChangeListener::MultiChangeListener()
21 {
22 }
23
24 void MultiChangeListener::valueChanged(SGPropertyNode* node)
25 {
26     valueChangedImplementation();
27 }
28
29 void MultiChangeListener::valueChangedImplementation()
30 {
31 }
32
33 AtomicChangeListener::AtomicChangeListener(std::vector<SGPropertyNode*>& nodes)
34     :  _dirty(false), _valid(true)
35 {
36     listenToProperties(nodes.begin(), nodes.end());
37 }
38
39 void AtomicChangeListener::unregister_property(SGPropertyNode* node)
40 {
41     _valid = false;
42     // not necessary, but good hygine
43     vector<SGPropertyNode*>::iterator itr
44         = find(_watched.begin(), _watched.end(), node);
45     if (itr != _watched.end())
46         *itr = 0;
47     MultiChangeListener::unregister_property(node);
48 }
49
50 void AtomicChangeListener::fireChangeListeners()
51 {
52     vector<SGSharedPtr<AtomicChangeListener> >& listeners
53         = ListenerListSingleton::instance()->listeners;
54     for (vector<SGSharedPtr<AtomicChangeListener> >::iterator itr = listeners.begin(),
55              end = listeners.end();
56          itr != end;
57          ++itr) {
58         (*itr)->valuesChanged();
59         (*itr)->_dirty = false;
60     }
61     listeners.clear();
62 }
63
64 void AtomicChangeListener::valueChangedImplementation()
65 {
66     if (!_dirty) {
67         _dirty = true;
68         if (_valid)
69             ListenerListSingleton::instance()->listeners.push_back(this);
70     }
71 }
72
73 void AtomicChangeListener::valuesChanged()
74 {
75 }
76 }