// other ctors
public:
explicit symbol(const std::string & initname);
+ explicit symbol(const std::string & initname, const std::string & texname);
// functions overriding virtual functions from base classes
public:
basic * duplicate() const;
- void print(std::ostream & os, unsigned upper_precedence = 0) const;
- void printraw(std::ostream & os) const;
- void printtree(std::ostream & os, unsigned indent) const;
- void printcsrc(std::ostream & os, unsigned type, unsigned upper_precedence = 0) const;
+ void print(const print_context & c, unsigned level = 0) const;
bool info(unsigned inf) const;
- ex expand(unsigned options = 0) const;
- bool has(const ex & other) const;
int degree(const ex & s) const;
int ldegree(const ex & s) const;
ex coeff(const ex & s, int n = 1) const;
ex eval(int level = 0) const;
+ ex evalf(int level = 0) const { return *this; } // overwrites basic::evalf() for performance reasons
ex series(const relational & s, int order, unsigned options = 0) const;
ex normal(lst &sym_lst, lst &repl_lst, int level = 0) const;
ex to_rational(lst &repl_lst) const;
ex derivative(const symbol & s) const;
int compare_same_type(const basic & other) const;
bool is_equal_same_type(const basic & other) const;
- unsigned return_type(void) const;
- unsigned return_type_tinfo(void) const;
unsigned calchash(void) const;
// non-virtual functions in this class
public:
void assign(const ex & value);
void unassign(void);
- void setname(const std::string & n) { name = n; }
- std::string getname(void) const { return name; }
+ void set_name(const std::string & n) { name = n; }
+ std::string get_name(void) const { return name; }
private:
std::string & autoname_prefix(void);
+ std::string default_TeX_name(void) const;
// member variables
protected:
assigned_ex_info * asexinfop; ///< ptr to assigned expression, deprecated
- unsigned serial; ///< unique serial number for comparison
- std::string name; ///< printname of this symbol
+ unsigned serial; ///< unique serial number for comparison
+ std::string name; ///< printname of this symbol
+ std::string TeX_name; ///< LaTeX name of this symbol
private:
static unsigned next_serial;
};
// utility functions
+
+/** Return the symbol object handled by an ex. Deprecated: use ex_to<symbol>().
+ * This is unsafe: you need to check the type first. */
inline const symbol &ex_to_symbol(const ex &e)
{
return static_cast<const symbol &>(*e.bp);
}
+inline symbol &ex_to_nonconst_symbol(const ex &e)
+{
+ return static_cast<symbol &>(*e.bp);
+}
+
+/** Specialization of is_exactly_a<symbol>(obj) for symbol objects. */
+template<> inline bool is_exactly_a<symbol>(const basic & obj)
+{
+ return obj.tinfo()==TINFO_symbol;
+}
// wrapper functions around member functions
inline void unassign(symbol & symarg)