summaryrefslogtreecommitdiff
path: root/src/generic/problemresolver/incremental_expression.h
diff options
context:
space:
mode:
authorDaniel Burrows <dburrows@debian.org>2009-05-26 08:00:38 -0700
committerDaniel Burrows <dburrows@debian.org>2009-05-26 08:00:38 -0700
commitffe9aab3265da3c88f51522758edeccc5096f85a (patch)
treeeac2114194323e9eecb09a758ce8256a48afe8c0 /src/generic/problemresolver/incremental_expression.h
parent44553f7e410fd1cdba1f29f810c273dcb51ed482 (diff)
downloadaptitude-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.h39
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.
*/