From 201e00b02f59779c69eeb384b42adf39982fc041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Wardy=C5=84ski?= <no@email> Date: Wed, 10 Nov 2010 21:58:11 +0100 Subject: [PATCH] Some fiddling around to_string functino to use stringstream --- libwccl/ops/conditional.h | 89 +++++++++++++++++++------------- libwccl/ops/formatters.cpp | 41 ++++++--------- libwccl/ops/logicalpredicate.cpp | 26 +++++----- 3 files changed, 84 insertions(+), 72 deletions(-) diff --git a/libwccl/ops/conditional.h b/libwccl/ops/conditional.h index 785c1d0..dfae932 100644 --- a/libwccl/ops/conditional.h +++ b/libwccl/ops/conditional.h @@ -9,6 +9,9 @@ #include <libwccl/ops/formatters.h> #include <libwccl/ops/constant.h> +#include <sstream> +#include <boost/format.hpp> + namespace Wccl { /** @@ -37,16 +40,7 @@ public: * String representation of conditional operator in form of: * "if cond_expr_string then iftrue_expr_string else iffalse_expr_string" */ - virtual std::string to_string(const Corpus2::Tagset& tagset) const { - std::string s(this->operator_name(tagset)); - s.append(" "); - s.append(cond_expr_->to_string(tagset)); - s.append(" then "); - s.append(iftrue_expr_->to_string(tagset)); - s.append(" else "); - s.append(iffalse_expr_->to_string(tagset)); - return s; - } + virtual std::string to_string(const Corpus2::Tagset& tagset) const; /** * String representation of conditional operator in form of: @@ -54,16 +48,7 @@ public: * This version does not require tagset, but may be inclomplete * and/or contain internal info. */ - virtual std::string to_raw_string() const { - std::string s(this->raw_operator_name()); - s.append(" "); - s.append(cond_expr_->to_raw_string()); - s.append(" then "); - s.append(iftrue_expr_->to_raw_string()); - s.append(" else "); - s.append(iffalse_expr_->to_raw_string()); - return s; - } + virtual std::string to_raw_string() const; virtual const std::string raw_operator_name() const { return "if"; @@ -118,14 +103,7 @@ public: * String representation of conditional operator in form of: * "? if_true_expr_string ? cond_expr_string" */ - virtual std::string to_string(const Corpus2::Tagset& tagset) const { - std::string s(this->operator_name(tagset)); - s.append(" "); - s.append(this->iftrue_expr_->to_string(tagset)); - s.append(" ? "); - s.append(this->cond_expr_->to_string(tagset)); - return s; - } + virtual std::string to_string(const Corpus2::Tagset& tagset) const; /** * String representation of conditional operator in form of: @@ -133,20 +111,59 @@ public: * This version does not require tagset, but may be inclomplete * and/or contain internal info. */ - virtual std::string to_raw_string() const { - std::string s(this->raw_operator_name()); - s.append(" "); - s.append(this->iftrue_expr_->to_raw_string()); - s.append(" ? "); - s.append(this->cond_expr_->to_raw_string()); - return s; - } + virtual std::string to_raw_string() const; virtual const std::string raw_operator_name() const { return "?"; } }; +template<class T> +std::string Conditional<T>::to_raw_string() const +{ + std::stringstream ss; + ss << boost::format("%1% %2% then %3% else %4%") + % this->raw_operator_name() + % this->cond_expr_->to_raw_string() + % this->iftrue_expr_->to_raw_string() + % this->iffalse_expr_->to_raw_string(); + return ss.str(); +} + +template<class T> +std::string Conditional<T>::to_string(const Corpus2::Tagset &tagset) const +{ + std::stringstream ss; + ss << boost::format("%1% %2% then %3% else %4%") + % this->operator_name(tagset) + % this->cond_expr_->to_string(tagset) + % this->iftrue_expr_->to_string(tagset) + % this->iffalse_expr_->to_string(tagset); + return ss.str(); +} + + +template<class T> +std::string ConditionalOp<T>::to_raw_string() const +{ + std::stringstream ss; + ss << boost::format("%1% %2% ? %3%") + % this->raw_operator_name() + % this->iftrue_expr_->to_raw_string() + % this->cond_expr_->to_raw_string(); + return ss.str(); +} + +template<class T> +std::string ConditionalOp<T>::to_string(const Corpus2::Tagset &tagset) const +{ + std::stringstream ss; + ss << boost::format("%1% %2% ? %3%") + % this->operator_name(tagset) + % this->iftrue_expr_->to_string(tagset) + % this->cond_expr_->to_string(tagset); + return ss.str(); +} } /* end ns Wccl */ diff --git a/libwccl/ops/formatters.cpp b/libwccl/ops/formatters.cpp index 4adf2da..2b6daca 100644 --- a/libwccl/ops/formatters.cpp +++ b/libwccl/ops/formatters.cpp @@ -1,4 +1,5 @@ #include <libwccl/ops/formatters.h> +#include <sstream> namespace Wccl { @@ -10,11 +11,10 @@ std::string UnaryFunctionFormatter::to_raw_string( const char* open_bracket, const char* close_bracket) { - std::string s(f.raw_operator_name()); - s.append(open_bracket); - s.append(arg_expr.to_raw_string()); - s.append(close_bracket); - return s; + std::stringstream ss; + ss << f.raw_operator_name() << open_bracket << arg_expr.to_raw_string() + << close_bracket; + return ss.str(); } std::string UnaryFunctionFormatter::to_string( @@ -24,11 +24,10 @@ std::string UnaryFunctionFormatter::to_string( const char* open_bracket, const char* close_bracket) { - std::string s(f.operator_name(tagset)); - s.append(open_bracket); - s.append(arg_expr.to_string(tagset)); - s.append(close_bracket); - return s; + std::stringstream ss; + ss << f.operator_name(tagset) << open_bracket << arg_expr.to_string(tagset) + << close_bracket; + return ss.str(); } // ----- BinaryFunctionFormatter ------ @@ -39,13 +38,10 @@ std::string BinaryFunctionFormatter::to_string( const FunctionBase& arg1_expr, const FunctionBase& arg2_expr) { - std::string s(f.operator_name(tagset)); - s.append("("); - s.append(arg1_expr.to_string(tagset)); - s.append(", "); - s.append(arg2_expr.to_string(tagset)); - s.append(")"); - return s; + std::stringstream ss; + ss << f.operator_name(tagset) << "(" << arg1_expr.to_string(tagset) + << ", " << arg2_expr.to_string(tagset) << ")"; + return ss.str(); } std::string BinaryFunctionFormatter::to_raw_string( @@ -53,13 +49,10 @@ std::string BinaryFunctionFormatter::to_raw_string( const FunctionBase& arg1_expr, const FunctionBase& arg2_expr) { - std::string s(f.raw_operator_name()); - s.append("("); - s.append(arg1_expr.to_raw_string()); - s.append(", "); - s.append(arg2_expr.to_raw_string()); - s.append(")"); - return s; + std::stringstream ss; + ss << f.raw_operator_name() << "(" << arg1_expr.to_raw_string() + << ", " << arg2_expr.to_raw_string() << ")"; + return ss.str(); } } /* end ns Wccl */ diff --git a/libwccl/ops/logicalpredicate.cpp b/libwccl/ops/logicalpredicate.cpp index 750f144..c00be52 100644 --- a/libwccl/ops/logicalpredicate.cpp +++ b/libwccl/ops/logicalpredicate.cpp @@ -1,35 +1,37 @@ #include <libwccl/ops/logicalpredicate.h> +#include <sstream> + namespace Wccl { std::string LogicalPredicate::to_string(const Corpus2::Tagset& tagset) const { - std::string s(operator_name(tagset)); - s.append("("); + std::stringstream ss; + ss << operator_name(tagset) << "("; BoolFunctionPtrVector::const_iterator it = expressions_->begin(); while(it != expressions_->end()) { - s.append((*it)->to_string(tagset)); + ss << (*it)->to_string(tagset); if(++it != expressions_->end()) { - s.append(", "); + ss << ", "; } } - s.append(")"); - return s; + ss << ")"; + return ss.str(); } std::string LogicalPredicate::to_raw_string() const { - std::string s(raw_operator_name()); - s.append("("); + std::stringstream ss; + ss << raw_operator_name() << "("; BoolFunctionPtrVector::const_iterator it = expressions_->begin(); while(it != expressions_->end()) { - s.append((*it)->to_raw_string()); + ss << (*it)->to_raw_string(); if(++it != expressions_->end()) { - s.append(", "); + ss << ", "; } } - s.append(")"); - return s; + ss << ")"; + return ss.str(); } } /* end ns Wccl */ -- GitLab