From fece7ce769888f4dc37a5ba9c9387912f6467a95 Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Fri, 19 Mar 2021 22:32:28 +0100 Subject: [PATCH] get rid of most remaining cs_string --- src/cs_val.cc | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/cs_val.cc b/src/cs_val.cc index 78c7264..71912ab 100644 --- a/src/cs_val.cc +++ b/src/cs_val.cc @@ -4,8 +4,8 @@ namespace cscript { -static cs_string intstr(cs_int v) { - auto app = ostd::appender(); +static cs_charbuf intstr(cs_int v, cs_shared_state &cs) { + auto app = ostd::appender(cs); try { ostd::format(app, CS_INT_FORMAT, v); } catch (ostd::format_error const &e) { @@ -14,8 +14,8 @@ static cs_string intstr(cs_int v) { return std::move(app.get()); } -static cs_string floatstr(cs_float v) { - auto app = ostd::appender(); +static cs_charbuf floatstr(cs_float v, cs_shared_state &cs) { + auto app = ostd::appender(cs); try { ostd::format( app, (v == floor(v)) ? CS_ROUND_FLOAT_FORMAT : CS_FLOAT_FORMAT, v @@ -190,13 +190,13 @@ cs_int cs_value::force_int() { } ostd::string_range cs_value::force_str() { - cs_string rs; + cs_charbuf rs{*state()}; switch (get_type()) { case cs_value_type::FLOAT: - rs = floatstr(csv_get(p_stor)); + rs = std::move(floatstr(csv_get(p_stor), *state())); break; case cs_value_type::INT: - rs = intstr(csv_get(p_stor)); + rs = std::move(intstr(csv_get(p_stor), *state())); break; case cs_value_type::STRING: return ostd::string_range( @@ -205,7 +205,7 @@ ostd::string_range cs_value::force_str() { default: break; } - set_str(rs); + set_str(rs.str()); return ostd::string_range(*reinterpret_cast(&p_stor)); } @@ -260,9 +260,13 @@ cs_strref cs_value::get_str() const { case cs_value_type::STRING: return *reinterpret_cast(&p_stor); case cs_value_type::INT: - return cs_strref{*state(), intstr(csv_get(p_stor))}; + return cs_strref{ + *state(), intstr(csv_get(p_stor), *state()).str() + }; case cs_value_type::FLOAT: - return cs_strref{*state(), floatstr(csv_get(p_stor))}; + return cs_strref{ + *state(), floatstr(csv_get(p_stor), *state()).str() + }; default: break; }