From 9b2703f557e30e4a3fe4277fdd7980cf588e4f8a Mon Sep 17 00:00:00 2001 From: artemp Date: Fri, 21 Jun 2013 14:47:38 +0100 Subject: [PATCH] + to_string based on spirit::karma for completeness. --- src/color.cpp | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/color.cpp b/src/color.cpp index 4c5e6b38b..a71086664 100644 --- a/src/color.cpp +++ b/src/color.cpp @@ -30,6 +30,7 @@ // boost #include +#include // stl #include @@ -42,23 +43,26 @@ color::color(std::string const& str) std::string color::to_string() const { - std::stringstream ss; - if (alpha_ == 255) - { - ss << "rgb(" - << static_cast(red()) << "," - << static_cast(green()) << "," - << static_cast(blue()) << ")"; - } - else - { - ss << "rgba(" - << static_cast(red()) << "," - << static_cast(green()) << "," - << static_cast(blue()) << "," - << alpha() / 255.0 << ")"; - } - return ss.str(); + namespace karma = boost::spirit::karma; + using boost::spirit::karma::_1; + using boost::spirit::karma::eps; + using boost::spirit::karma::double_; + using boost::spirit::karma::string; + boost::spirit::karma::uint_generator color_generator; + std::string str; + std::back_insert_iterator sink(str); + karma::generate(sink, + // begin grammar + string[ phoenix::if_(alpha()==255) [_1="rgb("].else_[_1="rgba("]] + << color_generator[_1 = red()] << ',' + << color_generator[_1 = green()] << ',' + << color_generator[_1 = blue()] + << string[ phoenix::if_(alpha()==255) [_1 = ')'].else_[_1 =',']] + << eps(alpha()<255) << ',' << double_ [_1 = alpha()/255.0] + << ')' + // end grammar + ); + return str; } std::string color::to_hex_string() const