From: Richard Kreckel Date: Thu, 9 Dec 2010 08:18:34 +0000 (+0100) Subject: Make symbol::name be initialized lazily. X-Git-Tag: release_1-6-0~17^2~1^2 X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?a=commitdiff_plain;h=c5be6a0d868b7fbf2bf51ed3ee2d2f50d3574b99;p=ginac.git 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) --- 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: