#include <string>
#include "basic.h"
+#include "ex.h"
-#ifndef NO_NAMESPACE_GINAC
namespace GiNaC {
-#endif // ndef NO_NAMESPACE_GINAC
typedef ex (*evalffunctype)(void);
class constant : public basic
{
GINAC_DECLARE_REGISTERED_CLASS(constant, basic)
-
+
// member functions
-
- // other constructors
+
+ // other ctors
public:
- constant(const std::string & initname, evalffunctype efun=0);
- constant(const std::string & initname, const numeric & initnumber);
-
+ constant(const std::string & initname, evalffunctype efun = 0, const std::string & texname = std::string());
+ constant(const std::string & initname, const numeric & initnumber, const std::string & texname = std::string());
+
// functions overriding virtual functions from bases classes
public:
- 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;
- ex evalf(int level=0) const;
+ void print(const print_context & c, unsigned level = 0) const;
+ int degree(const ex & s) const;
+ int ldegree(const ex & s) const;
+ ex coeff(const ex & s, int n = 1) const;
+ ex evalf(int level = 0) const;
protected:
ex derivative(const symbol & s) const;
bool is_equal_same_type(const basic & other) const;
+ unsigned calchash(void) const;
// new virtual functions which can be overridden by derived classes
// none
-
+
// non-virtual functions in this class
// none
-
+
// member variables
-
+
private:
- std::string name;
+ std::string name; ///< printname of this constant
+ std::string TeX_name; ///< LaTeX name
evalffunctype ef;
- numeric * number;
- // bool fct_assigned;
- unsigned serial; //!< unique serial number for comparision
+ numeric *number; ///< numerical value this constant evalf()s to
+ unsigned serial; ///< unique serial number for comparison
static unsigned next_serial;
};
extern const constant Catalan;
extern const constant Euler;
-#ifndef NO_NAMESPACE_GINAC
+// utility functions
+inline const constant &ex_to_constant(const ex &e)
+{
+ return static_cast<const constant &>(*e.bp);
+}
+
} // namespace GiNaC
-#endif // ndef NO_NAMESPACE_GINAC
#endif // ndef __GINAC_CONSTANT_H__