3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-07 09:55:19 +00:00

remove a few string copies

This commit is contained in:
Nuno Lopes 2023-12-20 16:55:09 +00:00
parent db5a1a7604
commit b2d5c24c1d
18 changed files with 39 additions and 80 deletions

View file

@ -146,8 +146,7 @@ extern "C" {
ast_manager& m = mk_c(c)->m(); ast_manager& m = mk_c(c)->m();
recfun::decl::plugin& p = mk_c(c)->recfun().get_plugin(); recfun::decl::plugin& p = mk_c(c)->recfun().get_plugin();
if (!p.has_def(d)) { if (!p.has_def(d)) {
std::string msg = "function " + mk_pp(d, m) + " needs to be declared using rec_func_decl"; SET_ERROR_CODE(Z3_INVALID_ARG, "function " + mk_pp(d, m) + " needs to be declared using rec_func_decl");
SET_ERROR_CODE(Z3_INVALID_ARG, msg.c_str());
return; return;
} }
expr_ref abs_body(m); expr_ref abs_body(m);
@ -168,8 +167,7 @@ extern "C" {
return; return;
} }
if (!pd.get_def()->get_cases().empty()) { if (!pd.get_def()->get_cases().empty()) {
std::string msg = "function " + mk_pp(d, m) + " has already been given a definition"; SET_ERROR_CODE(Z3_INVALID_ARG, "function " + mk_pp(d, m) + " has already been given a definition");
SET_ERROR_CODE(Z3_INVALID_ARG, msg.c_str());
return; return;
} }

View file

@ -160,8 +160,8 @@ extern "C" {
for (; it != end; ++it) { for (; it != end; ++it) {
buffer << "\n (" << mk_ismt2_pp(it->m_key, mng, 3) << "\n " << mk_ismt2_pp(it->m_value, mng, 3) << ")"; buffer << "\n (" << mk_ismt2_pp(it->m_key, mng, 3) << "\n " << mk_ismt2_pp(it->m_value, mng, 3) << ")";
} }
buffer << ")"; buffer << ')';
return mk_c(c)->mk_external_string(buffer.str()); return mk_c(c)->mk_external_string(std::move(buffer).str());
Z3_CATCH_RETURN(nullptr); Z3_CATCH_RETURN(nullptr);
} }

View file

@ -338,12 +338,12 @@ namespace api {
std::ostringstream buffer; std::ostringstream buffer;
app * a = to_app(n); app * a = to_app(n);
buffer << mk_pp(a->get_decl(), m()) << " applied to: "; buffer << mk_pp(a->get_decl(), m()) << " applied to: ";
if (a->get_num_args() > 1) buffer << "\n"; if (a->get_num_args() > 1) buffer << '\n';
for (unsigned i = 0; i < a->get_num_args(); ++i) { for (unsigned i = 0; i < a->get_num_args(); ++i) {
buffer << mk_bounded_pp(a->get_arg(i), m(), 3) << " of sort "; buffer << mk_bounded_pp(a->get_arg(i), m(), 3) << " of sort ";
buffer << mk_pp(a->get_arg(i)->get_sort(), m()) << "\n"; buffer << mk_pp(a->get_arg(i)->get_sort(), m()) << '\n';
} }
auto str = buffer.str(); auto str = std::move(buffer).str();
warning_msg("%s", str.c_str()); warning_msg("%s", str.c_str());
break; break;
} }

View file

@ -1022,7 +1022,7 @@ extern "C" {
if (mpfm.is_inf(val)) mpqm.set(q, 0); if (mpfm.is_inf(val)) mpqm.set(q, 0);
std::stringstream ss; std::stringstream ss;
mpqm.display_decimal(ss, q, sbits); mpqm.display_decimal(ss, q, sbits);
return mk_c(c)->mk_external_string(ss.str()); return mk_c(c)->mk_external_string(std::move(ss).str());
Z3_CATCH_RETURN(""); Z3_CATCH_RETURN("");
} }
@ -1100,7 +1100,7 @@ extern "C" {
} }
std::stringstream ss; std::stringstream ss;
ss << exp; ss << exp;
return mk_c(c)->mk_external_string(ss.str()); return mk_c(c)->mk_external_string(std::move(ss).str());
Z3_CATCH_RETURN(""); Z3_CATCH_RETURN("");
} }

View file

@ -185,7 +185,7 @@ extern "C" {
std::ostringstream buffer; std::ostringstream buffer;
to_goal_ref(g)->display(buffer); to_goal_ref(g)->display(buffer);
// Hack for removing the trailing '\n' // Hack for removing the trailing '\n'
std::string result = buffer.str(); std::string result = std::move(buffer).str();
SASSERT(result.size() > 0); SASSERT(result.size() > 0);
result.resize(result.size()-1); result.resize(result.size()-1);
return mk_c(c)->mk_external_string(std::move(result)); return mk_c(c)->mk_external_string(std::move(result));
@ -203,7 +203,7 @@ extern "C" {
} }
to_goal_ref(g)->display_dimacs(buffer, include_names); to_goal_ref(g)->display_dimacs(buffer, include_names);
// Hack for removing the trailing '\n' // Hack for removing the trailing '\n'
std::string result = buffer.str(); std::string result = std::move(buffer).str();
SASSERT(result.size() > 0); SASSERT(result.size() > 0);
result.resize(result.size()-1); result.resize(result.size()-1);
return mk_c(c)->mk_external_string(std::move(result)); return mk_c(c)->mk_external_string(std::move(result));

View file

@ -432,14 +432,14 @@ extern "C" {
if (mk_c(c)->get_print_mode() == Z3_PRINT_SMTLIB2_COMPLIANT) { if (mk_c(c)->get_print_mode() == Z3_PRINT_SMTLIB2_COMPLIANT) {
model_smt2_pp(buffer, mk_c(c)->m(), *(to_model_ref(m)), 0); model_smt2_pp(buffer, mk_c(c)->m(), *(to_model_ref(m)), 0);
// Hack for removing the trailing '\n' // Hack for removing the trailing '\n'
result = buffer.str(); result = std::move(buffer).str();
if (!result.empty()) if (!result.empty())
result.resize(result.size()-1); result.resize(result.size()-1);
} }
else { else {
model_params p; model_params p;
model_v2_pp(buffer, *(to_model_ref(m)), p.partial()); model_v2_pp(buffer, *(to_model_ref(m)), p.partial());
result = buffer.str(); result = std::move(buffer).str();
} }
return mk_c(c)->mk_external_string(std::move(result)); return mk_c(c)->mk_external_string(std::move(result));
Z3_CATCH_RETURN(nullptr); Z3_CATCH_RETURN(nullptr);

View file

@ -189,7 +189,7 @@ extern "C" {
if (ok && r.is_int() && !r.is_neg()) { if (ok && r.is_int() && !r.is_neg()) {
std::stringstream strm; std::stringstream strm;
r.display_bin(strm, r.get_num_bits()); r.display_bin(strm, r.get_num_bits());
return mk_c(c)->mk_external_string(strm.str()); return mk_c(c)->mk_external_string(std::move(strm).str());
} }
else { else {
SET_ERROR_CODE(Z3_INVALID_ARG, nullptr); SET_ERROR_CODE(Z3_INVALID_ARG, nullptr);
@ -237,7 +237,7 @@ extern "C" {
else if (mk_c(c)->fpautil().is_numeral(to_expr(a), tmp)) { else if (mk_c(c)->fpautil().is_numeral(to_expr(a), tmp)) {
std::ostringstream buffer; std::ostringstream buffer;
fu.fm().display_smt2(buffer, tmp, false); fu.fm().display_smt2(buffer, tmp, false);
return mk_c(c)->mk_external_string(buffer.str()); return mk_c(c)->mk_external_string(std::move(buffer).str());
} }
else { else {
SET_ERROR_CODE(Z3_INVALID_ARG, nullptr); SET_ERROR_CODE(Z3_INVALID_ARG, nullptr);
@ -288,21 +288,21 @@ extern "C" {
if (u.is_numeral(e, r) && !r.is_int()) { if (u.is_numeral(e, r) && !r.is_int()) {
std::ostringstream buffer; std::ostringstream buffer;
r.display_decimal(buffer, precision); r.display_decimal(buffer, precision);
return mk_c(c)->mk_external_string(buffer.str()); return mk_c(c)->mk_external_string(std::move(buffer).str());
} }
if (u.is_irrational_algebraic_numeral(e)) { if (u.is_irrational_algebraic_numeral(e)) {
algebraic_numbers::anum const & n = u.to_irrational_algebraic_numeral(e); algebraic_numbers::anum const & n = u.to_irrational_algebraic_numeral(e);
algebraic_numbers::manager & am = u.am(); algebraic_numbers::manager & am = u.am();
std::ostringstream buffer; std::ostringstream buffer;
am.display_decimal(buffer, n, precision); am.display_decimal(buffer, n, precision);
return mk_c(c)->mk_external_string(buffer.str()); return mk_c(c)->mk_external_string(std::move(buffer).str());
} }
else if (mk_c(c)->fpautil().is_rm_numeral(to_expr(a), rm)) else if (mk_c(c)->fpautil().is_rm_numeral(to_expr(a), rm))
return Z3_get_numeral_string(c, a); return Z3_get_numeral_string(c, a);
else if (mk_c(c)->fpautil().is_numeral(to_expr(a), ftmp)) { else if (mk_c(c)->fpautil().is_numeral(to_expr(a), ftmp)) {
std::ostringstream buffer; std::ostringstream buffer;
fu.fm().display_decimal(buffer, ftmp, 12); fu.fm().display_decimal(buffer, ftmp, 12);
return mk_c(c)->mk_external_string(buffer.str()); return mk_c(c)->mk_external_string(std::move(buffer).str());
} }
else if (Z3_get_numeral_rational(c, a, r)) { else if (Z3_get_numeral_rational(c, a, r)) {
return mk_c(c)->mk_external_string(r.to_string()); return mk_c(c)->mk_external_string(r.to_string());

View file

@ -170,8 +170,8 @@ extern "C" {
if (g_is_threaded || g_thread_id != std::this_thread::get_id()) { if (g_is_threaded || g_thread_id != std::this_thread::get_id()) {
g_is_threaded = true; g_is_threaded = true;
std::ostringstream strm; std::ostringstream strm;
strm << smt2log << "-" << std::this_thread::get_id(); strm << smt2log << '-' << std::this_thread::get_id();
smt2log = symbol(strm.str()); smt2log = symbol(std::move(strm).str());
} }
to_solver(s)->m_pp = alloc(solver2smt2_pp, mk_c(c)->m(), smt2log.str()); to_solver(s)->m_pp = alloc(solver2smt2_pp, mk_c(c)->m(), smt2log.str());
} }
@ -208,7 +208,7 @@ extern "C" {
if (!smt_logics::supported_logic(to_symbol(logic))) { if (!smt_logics::supported_logic(to_symbol(logic))) {
std::ostringstream strm; std::ostringstream strm;
strm << "logic '" << to_symbol(logic) << "' is not recognized"; strm << "logic '" << to_symbol(logic) << "' is not recognized";
SET_ERROR_CODE(Z3_INVALID_ARG, strm.str()); SET_ERROR_CODE(Z3_INVALID_ARG, std::move(strm).str());
RETURN_Z3(nullptr); RETURN_Z3(nullptr);
} }
else { else {
@ -306,7 +306,7 @@ extern "C" {
if (!parse_smt2_commands(*ctx.get(), is)) { if (!parse_smt2_commands(*ctx.get(), is)) {
ctx = nullptr; ctx = nullptr;
SET_ERROR_CODE(Z3_PARSER_ERROR, errstrm.str()); SET_ERROR_CODE(Z3_PARSER_ERROR, std::move(errstrm).str());
return; return;
} }
@ -333,7 +333,7 @@ extern "C" {
std::stringstream err; std::stringstream err;
sat::solver solver(to_solver_ref(s)->get_params(), m.limit()); sat::solver solver(to_solver_ref(s)->get_params(), m.limit());
if (!parse_dimacs(is, err, solver)) { if (!parse_dimacs(is, err, solver)) {
SET_ERROR_CODE(Z3_PARSER_ERROR, err.str()); SET_ERROR_CODE(Z3_PARSER_ERROR, std::move(err).str());
return; return;
} }
sat2goal s2g; sat2goal s2g;
@ -400,7 +400,7 @@ extern "C" {
if (!initialized) if (!initialized)
to_solver(s)->m_solver = nullptr; to_solver(s)->m_solver = nullptr;
descrs.display(buffer); descrs.display(buffer);
return mk_c(c)->mk_external_string(buffer.str()); return mk_c(c)->mk_external_string(std::move(buffer).str());
Z3_CATCH_RETURN(""); Z3_CATCH_RETURN("");
} }
@ -799,7 +799,7 @@ extern "C" {
init_solver(c, s); init_solver(c, s);
std::ostringstream buffer; std::ostringstream buffer;
to_solver_ref(s)->display(buffer); to_solver_ref(s)->display(buffer);
return mk_c(c)->mk_external_string(buffer.str()); return mk_c(c)->mk_external_string(std::move(buffer).str());
Z3_CATCH_RETURN(""); Z3_CATCH_RETURN("");
} }
@ -810,7 +810,7 @@ extern "C" {
init_solver(c, s); init_solver(c, s);
std::ostringstream buffer; std::ostringstream buffer;
to_solver_ref(s)->display_dimacs(buffer, include_names); to_solver_ref(s)->display_dimacs(buffer, include_names);
return mk_c(c)->mk_external_string(buffer.str()); return mk_c(c)->mk_external_string(std::move(buffer).str());
Z3_CATCH_RETURN(""); Z3_CATCH_RETURN("");
} }

View file

@ -58,13 +58,13 @@ inline std::ostream& operator<<(std::ostream & out, mk_pp_vec const & pp) {
inline std::string operator+(char const* s, mk_pp const& pp) { inline std::string operator+(char const* s, mk_pp const& pp) {
std::ostringstream strm; std::ostringstream strm;
strm << s << pp; strm << s << pp;
return strm.str(); return std::move(strm).str();
} }
inline std::string operator+(std::string const& s, mk_pp const& pp) { inline std::string operator+(std::string const& s, mk_pp const& pp) {
std::ostringstream strm; std::ostringstream strm;
strm << s << pp; strm << s << pp;
return strm.str(); return std::move(strm).str();
} }
inline std::string& operator+=(std::string& s, mk_pp const& pp) { inline std::string& operator+=(std::string& s, mk_pp const& pp) {

View file

@ -157,9 +157,7 @@ expr_ref pb_rewriter::mk_validate_rewrite(app_ref& e1, app_ref& e2) {
continue; continue;
} }
std::ostringstream strm; name = symbol('x' + std::to_string(i));
strm << 'x' << i;
name = symbol(strm.str());
trail.push_back(m.mk_const(name, a.mk_int())); trail.push_back(m.mk_const(name, a.mk_int()));
expr* x = trail.back(); expr* x = trail.back();
m.is_not(e,e); m.is_not(e,e);
@ -188,9 +186,7 @@ void pb_rewriter::validate_rewrite(func_decl* f, unsigned sz, expr*const* args,
} }
void pb_rewriter::dump_pb_rewrite(expr* fml) { void pb_rewriter::dump_pb_rewrite(expr* fml) {
std::ostringstream strm; std::ofstream out("pb_rewrite_" + std::to_string(s_lemma++) + ".smt2");
strm << "pb_rewrite_" << (s_lemma++) << ".smt2";
std::ofstream out(strm.str());
ast_smt_pp pp(m()); ast_smt_pp pp(m());
pp.display_smt2(out, fml); pp.display_smt2(out, fml);
out.close(); out.close();

View file

@ -70,8 +70,7 @@ struct well_sorted_proc {
strm << "Expected sort: " << mk_pp(expected_sort, m_manager) << '\n'; strm << "Expected sort: " << mk_pp(expected_sort, m_manager) << '\n';
strm << "Actual sort: " << mk_pp(actual_sort, m_manager) << '\n'; strm << "Actual sort: " << mk_pp(actual_sort, m_manager) << '\n';
strm << "Function sort: " << mk_pp(decl, m_manager) << '.'; strm << "Function sort: " << mk_pp(decl, m_manager) << '.';
auto str = strm.str(); warning_msg("%s", std::move(strm).str().c_str());
warning_msg("%s", str.c_str());
m_error = true; m_error = true;
return; return;
} }

View file

@ -24,7 +24,6 @@
#include <algorithm> #include <algorithm>
#ifdef lp_for_z3 #ifdef lp_for_z3
#include "util/rational.h" #include "util/rational.h"
#include "util/sstream.h"
#include "util/z3_exception.h" #include "util/z3_exception.h"
#else #else
// include "util/numerics/mpq.h" // include "util/numerics/mpq.h"

View file

@ -68,7 +68,7 @@ static void pp_uninterp_sorts(std::ostream & out, ast_printer_context & ctx, mod
buffer << " "; buffer << " ";
} }
buffer << "\n-----------"; buffer << "\n-----------";
std::string buffer_str = buffer.str(); std::string buffer_str = std::move(buffer).str();
unsigned len = static_cast<unsigned>(buffer_str.length()); unsigned len = static_cast<unsigned>(buffer_str.length());
pp_indent(out, indent); pp_indent(out, indent);
out << ";; "; out << ";; ";
@ -206,9 +206,7 @@ static void pp_funs(std::ostream & out, ast_printer_context & ctx, model_core co
if (f_i->is_partial()) { if (f_i->is_partial()) {
body = mk_string(m, "#unspecified"); body = mk_string(m, "#unspecified");
for (unsigned j = 0; j < f->get_arity(); j++) { for (unsigned j = 0; j < f->get_arity(); j++) {
std::stringstream strm; var_names.push_back(symbol("x!" + std::to_string(j+1)));
strm << "x!" << (j+1);
var_names.push_back(symbol(strm.str()));
} }
} }
else { else {

View file

@ -273,7 +273,7 @@ namespace sat {
std::string cut::table2string(unsigned num_input, uint64_t table) { std::string cut::table2string(unsigned num_input, uint64_t table) {
std::ostringstream strm; std::ostringstream strm;
display_table(strm, num_input, table); display_table(strm, num_input, table);
return strm.str(); return std::move(strm).str();
} }

View file

@ -2280,7 +2280,7 @@ namespace sat {
<< std::setw(4) << m_stats.m_restart << std::setw(4) << m_stats.m_restart
<< mk_stat(*this) << mk_stat(*this)
<< " " << std::setw(6) << std::setprecision(2) << m_stopwatch.get_current_seconds() << ")\n"; << " " << std::setw(6) << std::setprecision(2) << m_stopwatch.get_current_seconds() << ")\n";
std::string str(strm.str()); std::string str = std::move(strm).str();
svector<size_t> nums; svector<size_t> nums;
for (size_t i = 0; i < str.size(); ++i) { for (size_t i = 0; i < str.size(); ++i) {
while (i < str.size() && str[i] != ' ') ++i; while (i < str.size() && str[i] != ' ') ++i;

View file

@ -510,7 +510,7 @@ namespace smt {
#else #else
strm << "lemma_" << (++m_lemma_id) << ".smt2"; strm << "lemma_" << (++m_lemma_id) << ".smt2";
#endif #endif
return strm.str(); return std::move(strm).str();
} }
@ -722,7 +722,7 @@ namespace smt {
<< std::setw(4) << m_stats.m_num_del_clauses << " " << std::setw(4) << m_stats.m_num_del_clauses << " "
<< std::setw(7) << mem_stat() << ")\n"; << std::setw(7) << mem_stat() << ")\n";
std::string str(strm.str()); std::string str = std::move(strm).str();
svector<size_t> offsets; svector<size_t> offsets;
for (size_t i = 0; i < str.size(); ++i) { for (size_t i = 0; i < str.size(); ++i) {
while (i < str.size() && str[i] != ' ') ++i; while (i < str.size() && str[i] != ' ') ++i;

View file

@ -1,31 +0,0 @@
/*
Copyright (c) 2018 Microsoft Corporation
Module Name:
nat_set.h
Abstract:
Wrapper for sstream.
Author:
Leonardo de Moura (leonardo) 2013
Revision History:
*/
#pragma once
#include <sstream>
#include <string>
namespace lean {
/** \brief Wrapper for std::ostringstream */
class sstream {
std::ostringstream m_strm;
public:
std::string str() const { return m_strm.str(); }
template<typename T> sstream & operator<<(T const & t) { m_strm << t; return *this; }
};
}

View file

@ -152,7 +152,7 @@ std::string zstring::encode() const {
unsigned ch = m_buffer[i]; unsigned ch = m_buffer[i];
if (ch < 32 || ch >= 128 || ('\\' == ch && i + 1 < m_buffer.size() && 'u' == m_buffer[i+1])) { if (ch < 32 || ch >= 128 || ('\\' == ch && i + 1 < m_buffer.size() && 'u' == m_buffer[i+1])) {
_flush(); _flush();
strm << "\\u{" << std::hex << ch << std::dec << "}"; strm << "\\u{" << std::hex << ch << std::dec << '}';
} }
else { else {
if (offset == 99) if (offset == 99)
@ -161,7 +161,7 @@ std::string zstring::encode() const {
} }
} }
_flush(); _flush();
return strm.str(); return std::move(strm).str();
} }
bool zstring::suffixof(zstring const& other) const { bool zstring::suffixof(zstring const& other) const {