From a0173a4a4596037bfe7f5866c72f9bd25d424352 Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Sun, 9 Dec 2012 12:06:19 +0100 Subject: Do not presume the use of shared_ptr. --- cells.hpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'cells.hpp') diff --git a/cells.hpp b/cells.hpp index efa3f09..4799e69 100644 --- a/cells.hpp +++ b/cells.hpp @@ -22,14 +22,16 @@ #include #include #include +#include #include namespace cells { - class observer : public virtual std::enable_shared_from_this { + class observer { private: - std::forward_list> dependents; - std::forward_list> dependencies; + std::shared_ptr self; + std::list> dependents; + std::forward_list> dependencies; void clear_dependencies(); void mark_dependents(); @@ -38,9 +40,11 @@ namespace cells { void mark(); public: - void add_dependent(std::shared_ptr dependent); + observer() : self(std::make_shared(this)) { }; + + void add_dependent(observer* dependent); void remove_dependent(observer* dependent); - void reset_dependencies(std::forward_list> const& newdeps); + void reset_dependencies(std::forward_list const& newdeps); virtual void update() = 0; @@ -63,7 +67,7 @@ namespace cells { T& get(); T& operator *() { return get(); } //T operator ()() { return get(); } - operator T() { return get(); } + //operator T() { return get(); } virtual ~cell(); }; @@ -78,13 +82,11 @@ namespace cells { std::function alt_formula; protected: - formula_cell() { } virtual T recompute(T); virtual T init(); public: - //static std::shared_ptr> make() { return std::make_shared>(); } - static std::shared_ptr> make() { return std::shared_ptr>(new formula_cell()); } + formula_cell() { } void reset(T value); void reset(std::function); -- cgit v1.2.3