diff options
author | Daniel Burrows <dburrows@debian.org> | 2009-05-26 08:00:38 -0700 |
---|---|---|
committer | Daniel Burrows <dburrows@debian.org> | 2009-05-26 08:00:38 -0700 |
commit | ffe9aab3265da3c88f51522758edeccc5096f85a (patch) | |
tree | eac2114194323e9eecb09a758ce8256a48afe8c0 /src/generic/problemresolver/incremental_expression.h | |
parent | 44553f7e410fd1cdba1f29f810c273dcb51ed482 (diff) | |
download | aptitude-ffe9aab3265da3c88f51522758edeccc5096f85a.tar.gz |
Add a convenience class for writing "expressions" that are mainly listeners.
Diffstat (limited to 'src/generic/problemresolver/incremental_expression.h')
-rw-r--r-- | src/generic/problemresolver/incremental_expression.h | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/generic/problemresolver/incremental_expression.h b/src/generic/problemresolver/incremental_expression.h index 6fb4f351..20de48fe 100644 --- a/src/generic/problemresolver/incremental_expression.h +++ b/src/generic/problemresolver/incremental_expression.h @@ -325,6 +325,45 @@ public: } }; +/** \brief Base class for expressions that trivially wrap their + * subexpression. + */ +template<typename T> +class expression_wrapper : public expression_box<T> +{ +public: + expression_wrapper() : expression_box<T>() { } + expression_wrapper(const cwidget::util::ref_ptr<expression<T> > &child) + : expression_box<T>(child) + { + } + expression_wrapper(const expression_wrapper &other) + : expression_box<T>(other) + { + } + + expression_wrapper &operator=(const expression_wrapper &other) + { + set_child(other.get_child); + return *this; + } + + /** \brief Invoked by the default implementation of child_modified. + * + * This method's default implementation does nothing. + */ + virtual void changed(T new_value) + { + } + + void child_modified(const cwidget::util::ref_ptr<expression<T> > &child, + T old_value, + T new_value) + { + changed(new_value); + } +}; + /** \brief Base class for N-ary containers that support adding and * removing children. */ |