diff options
author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2012-12-09 12:24:10 +0100 |
---|---|---|
committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2012-12-09 12:27:58 +0100 |
commit | ac3830ae0c369fe9ab9f403f94215d073b9330aa (patch) | |
tree | de3039ed3e60299589baf31fefeac3dd05956a80 /cells.hpp | |
parent | 3e5637b0aad29d8a5e93ad4fdff4074f8dbc9409 (diff) |
Implement copy construction and assignment for observers.
Diffstat (limited to 'cells.hpp')
-rw-r--r-- | cells.hpp | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -29,22 +29,28 @@ namespace cells { class observer { private: - std::shared_ptr<observer*> self; + std::shared_ptr<observer*> const self; std::list<std::weak_ptr<observer*>> dependents; std::forward_list<std::weak_ptr<observer*>> dependencies; void clear_dependencies(); void mark_dependents(); + void reset_dependencies(std::forward_list<std::weak_ptr<observer*>> const&); + void reset_dependents(std::list<std::weak_ptr<observer*>> const&); + protected: void mark(); public: - observer() : self(std::make_shared<observer*>(this)) { }; + observer(); + observer(observer const& other); + + observer& operator =(observer const& other); void add_dependent(observer* dependent); void remove_dependent(observer* dependent); - void reset_dependencies(std::forward_list<observer*> const& newdeps); + void reset_dependencies(std::forward_list<observer*> const&); virtual void update() = 0; |