From 5398cbea9bf2e1d80fda69dcac0a91543bc3a92f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Wardy=C5=84ski?= <no@email> Date: Mon, 8 Nov 2010 14:48:56 +0100 Subject: [PATCH] Base class for predicates that operate on two sets --- libwccl/ops/setpredicate.h | 46 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 libwccl/ops/setpredicate.h diff --git a/libwccl/ops/setpredicate.h b/libwccl/ops/setpredicate.h new file mode 100644 index 0000000..b0f0bb4 --- /dev/null +++ b/libwccl/ops/setpredicate.h @@ -0,0 +1,46 @@ +#ifndef SETPREDICATE_H +#define SETPREDICATE_H + +#include <boost/shared_ptr.hpp> +#include <boost/mpl/list.hpp> +#include <boost/mpl/assert.hpp> +#include <boost/mpl/count.hpp> +#include <libwccl/ops/predicate.h> +#include <libwccl/ops/formatters.h> + +namespace Wccl { + +/** + * Abstract base class for predicates which operate on two sets + */ +template<class T> +class SetPredicate : public Predicate { + BOOST_MPL_ASSERT(( boost::mpl::count<boost::mpl::list<StrSet, TSet>, T> )); +public: + typedef boost::shared_ptr<Function<T> > SetFunctionPtr; + + SetPredicate(const SetFunctionPtr& set1_expr, const SetFunctionPtr& set2_expr) + : set1_expr_(set1_expr), set2_expr_(set2_expr) + { + BOOST_ASSERT(set1_expr_); + BOOST_ASSERT(set2_expr_); + } + + virtual std::string to_string(const Corpus2::Tagset& tagset) const { + return BinaryFunctionFormatter::to_string(tagset, *this, *set1_expr_, *set2_expr_); + } + + virtual std::string to_raw_string() const { + return BinaryFunctionFormatter::to_raw_string(*this, *set1_expr_, *set2_expr_); + } + +protected: + const SetFunctionPtr set1_expr_; + const SetFunctionPtr set2_expr_; + + typedef FunctionBase::BaseRetValPtr BaseRetValPtr; +}; + +} /* end ns Wccl */ + +#endif // SETPREDICATE_H -- GitLab