* Interface to GiNaC's constant types and some special constants. */
/*
- * GiNaC Copyright (C) 1999-2001 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2002 Johannes Gutenberg University Mainz, Germany
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#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);
-
- // functions overriding virtual functions from bases classes
+ 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 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;
- ex evalf(int level=0) const;
+ void print(const print_context & c, unsigned level = 0) const;
+ ex evalf(int level = 0) const;
protected:
ex derivative(const symbol & s) const;
- int compare_same_type(const basic & other) 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
+
+/** Specialization of is_exactly_a<constant>(obj) for constant objects. */
+template<> inline bool is_exactly_a<constant>(const basic & obj)
+{
+ return obj.tinfo()==TINFO_constant;
+}
+
} // namespace GiNaC
-#endif // ndef NO_NAMESPACE_GINAC
#endif // ndef __GINAC_CONSTANT_H__