From c5be6a0d868b7fbf2bf51ed3ee2d2f50d3574b99 Mon Sep 17 00:00:00 2001 From: Richard Kreckel Date: Thu, 9 Dec 2010 09:18:34 +0100 Subject: [PATCH] Make symbol::name be initialized lazily. This fixes symbol::get_name(), which returned an empty string instead of "symbol" followed by the serial number if the symbol's name wasn't specified in the constructor. Thanks to Warren Weckesser for reporting this bug. (cherry picked from commit f5abf61d2cb1a1d1809d270a24fa098575b172c4) --- ginac/symbol.cpp | 17 +++++++++++++---- ginac/symbol.h | 6 +++--- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/ginac/symbol.cpp b/ginac/symbol.cpp index c9db110f..e7eb9c92 100644 --- a/ginac/symbol.cpp +++ b/ginac/symbol.cpp @@ -150,12 +150,21 @@ static const std::string& get_default_TeX_name(const std::string& name); // public +std::string symbol::get_name() const +{ + if (name.empty()) { + std::ostringstream s; + s << "symbol" << serial; + name = s.str(); + } + return name; +} + +// protected + void symbol::do_print(const print_context & c, unsigned level) const { - if (!name.empty()) - c.s << name; - else - c.s << "symbol" << serial; + c.s << get_name(); } void symbol::do_print_latex(const print_latex & c, unsigned level) const diff --git a/ginac/symbol.h b/ginac/symbol.h index eefd27c8..ec371f8c 100644 --- a/ginac/symbol.h +++ b/ginac/symbol.h @@ -69,7 +69,7 @@ protected: // non-virtual functions in this class public: void set_name(const std::string & n) { name = n; } - std::string get_name() const { return name; } + std::string get_name() const; virtual unsigned get_domain() const { return domain::complex; } protected: void do_print(const print_context & c, unsigned level) const; @@ -81,7 +81,7 @@ protected: protected: unsigned serial; ///< unique serial number for comparison - std::string name; ///< printname of this symbol + mutable std::string name; ///< printname of this symbol std::string TeX_name; ///< LaTeX name of this symbol private: static unsigned next_serial; @@ -108,7 +108,7 @@ public: GINAC_DECLARE_UNARCHIVER(realsymbol); -/** Specialization of symbol to real domain */ +/** Specialization of symbol to real positive domain */ class possymbol : public realsymbol { public: -- 2.44.0