From be6cad814c18ff39f4e16c32441e98e6d72f32d4 Mon Sep 17 00:00:00 2001 From: Richard Kreckel Date: Mon, 5 Jun 2000 13:45:14 +0000 Subject: [PATCH] - ginac/operators.cpp: added some missing debugmsg()'s, which would have come in handy if they had been around before Cint's show-stopper bug. ;-) - INSTALL, cint/ginaccint.bin.cpp: Updated Cint-copyright. - ginac/*: deleted some #ifdef CINT_CONVERSION_WORKAROUND's. --- INSTALL | 5 +-- cint/ginaccint.bin.cpp | 3 +- configure | 2 +- ginac/ex.cpp | 2 + ginac/ex.h | 37 ----------------- ginac/function.pl | 58 --------------------------- ginac/numeric.h | 7 ---- ginac/operators.cpp | 90 +++++------------------------------------- 8 files changed, 15 insertions(+), 189 deletions(-) diff --git a/INSTALL b/INSTALL index 5f595f56..0c629b5a 100644 --- a/INSTALL +++ b/INSTALL @@ -107,8 +107,7 @@ Here is an overview to gives you an idea if you can expect GiNaCcint to compile, install and work properly: Cint version | is known to work with | is known not to work with ---------------+---------------------------+----------------------------- - < 5.14.37 | | (incompatible with GiNaC) - 5.14.38 | egcs 1.1.1 (problematic) | gcc.2.95.2 +--------------+---------------------------+------------------------------ + < 5.14.39 | `verboten' by license (please bite your favorite lawyer) 5.14.39 | egcs 1.1.1, gcc.2.95.2 | gcc <= 2.7.2.3 5.14.40 | egcs 1.1.1, gcc.2.95.2 | gcc <= 2.7.2.3 diff --git a/cint/ginaccint.bin.cpp b/cint/ginaccint.bin.cpp index 2641c18b..065c27c8 100644 --- a/cint/ginaccint.bin.cpp +++ b/cint/ginaccint.bin.cpp @@ -160,8 +160,7 @@ void process_tempfile(string const & command) #endif // def OBSCURE_CINT_HACK return; } -//----+----#----+----#----+----#----+----#----+----#----+----#----+----#----+----# -// __, _______ Cint: Copyright 1995-2000 Masaharu Goto and Agilent Technologies, JP." << endl + void greeting(void) { cout << "Welcome to GiNaC-cint (" << PACKAGE << " V" << VERSION << ")" << endl; diff --git a/configure b/configure index f71fb276..43556678 100755 --- a/configure +++ b/configure @@ -3060,7 +3060,7 @@ fi echo "$ac_t""creating cint/Makefile" 1>&6 (cd cint && \ $MAKECINT -mk Makefile.makecint -o ginaccint.bin -m \ - -D OBSCURE_CINT_HACK -cc "$CXXFLAGS" \ + -D OBSCURE_CINT_HACK "$CPPFLAGS" -cc "$CXXFLAGS" \ -I .. -I $CINTSYSDIR -m -H ../ginac/ginac.h \ -C++ ginaccint.bin.cpp \ -l -L../ginac/.libs -lginac -lcln \ diff --git a/ginac/ex.cpp b/ginac/ex.cpp index 5c6853a7..474b9fd3 100644 --- a/ginac/ex.cpp +++ b/ginac/ex.cpp @@ -482,8 +482,10 @@ void ex::construct_from_basic(const basic & other) } } else { if (other.flags & status_flags::dynallocated) { + // it's on the heap, so just copy bp: bp = &const_cast(other); } else { + // create a duplicate on the heap: bp = other.duplicate(); bp->setflag(status_flags::dynallocated); } diff --git a/ginac/ex.h b/ginac/ex.h index b5e511e6..c7e1da8c 100644 --- a/ginac/ex.h +++ b/ginac/ex.h @@ -121,13 +121,6 @@ public: ; #endif // def INLINE_EX_CONSTRUCTORS -#ifdef CINT_CONVERSION_WORKAROUND - // workaround to fix the missing automatic derived->basic->ex conversion - const ex & operator=(const basic & other) - { - return *this=ex(other); - } -#endif // def CINT_CONVERSION_WORKAROUND // other constructors public: @@ -239,9 +232,6 @@ public: unsigned nops() const; ex expand(unsigned options=0) const; bool has(const ex & other) const; -#ifdef CINT_CONVERSION_WORKAROUND - bool has(basic const & other) const { return has(ex(other)); } -#endif // def CINT_CONVERSION_WORKAROUND int degree(const symbol & s) const; int ldegree(const symbol & s) const; ex coeff(const symbol & s, int n=1) const; @@ -254,9 +244,6 @@ public: numeric integer_content(void) const; ex primpart(const symbol &x) const; ex primpart(const symbol &x, const ex &cont) const; -#ifdef CINT_CONVERSION_WORKAROUND - ex primpart(const symbol &x, const basic &cont) const { return primpart(x,ex(cont)); } -#endif // def CINT_CONVERSION_WORKAROUND ex normal(int level = 0) const; ex to_rational(lst &repl_lst) const; ex smod(const numeric &xi) const; @@ -266,20 +253,11 @@ public: ex evalf(int level = 0) const; ex diff(const symbol & s, unsigned nth = 1) const; ex series(const ex & r, int order) const; -#ifdef CINT_CONVERSION_WORKAROUND - ex series(const basic & r, int order) const { return series(ex(r),order); } -#endif // def CINT_CONVERSION_WORKAROUND ex subs(const lst & ls, const lst & lr) const; ex subs(const ex & e) const; -#ifdef CINT_CONVERSION_WORKAROUND - ex subs(const basic & e) const { return subs(ex(e)); } -#endif // def CINT_CONVERSION_WORKAROUND exvector get_indices(void) const; ex simplify_ncmul(const exvector & v) const; ex operator[](const ex & index) const; -#ifdef CINT_CONVERSION_WORKAROUND - ex operator[](const basic & index) const { return operator[](ex(index)); } -#endif // def CINT_CONVERSION_WORKAROUND ex operator[](int i) const; ex op(int i) const; ex & let_op(int i); @@ -299,9 +277,6 @@ public: #else ; #endif // def INLINE_EX_CONSTRUCTORS -#ifdef CINT_CONVERSION_WORKAROUND - int compare(const basic & other) const { return compare(ex(other)); } -#endif // def CINT_CONVERSION_WORKAROUND bool is_equal(const ex & other) const #ifdef INLINE_EX_CONSTRUCTORS { @@ -316,9 +291,6 @@ public: #else ; #endif // def INLINE_EX_CONSTRUCTORS -#ifdef CINT_CONVERSION_WORKAROUND - bool is_equal(const basic & other) const { return is_equal(ex(other)); } -#endif // def CINT_CONVERSION_WORKAROUND bool is_zero(void) const {return compare(_ex0())==0;}; unsigned return_type(void) const; @@ -326,17 +298,8 @@ public: unsigned gethash(void) const; ex exadd(const ex & rh) const; -#ifdef CINT_CONVERSION_WORKAROUND - ex exadd(const basic & rh) const { return exadd(ex(rh)); } -#endif // def CINT_CONVERSION_WORKAROUND ex exmul(const ex & rh) const; -#ifdef CINT_CONVERSION_WORKAROUND - ex exmul(const basic & rh) const { return exmul(ex(rh)); } -#endif // def CINT_CONVERSION_WORKAROUND ex exncmul(const ex & rh) const; -#ifdef CINT_CONVERSION_WORKAROUND - ex exncmul(const basic & rh) const { return exncmul(ex(rh)); } -#endif // def CINT_CONVERSION_WORKAROUND private: void construct_from_basic(const basic & other); void construct_from_int(int i); diff --git a/ginac/function.pl b/ginac/function.pl index 16936d5a..36b7c7b7 100755 --- a/ginac/function.pl +++ b/ginac/function.pl @@ -35,33 +35,6 @@ sub generate { } $declare_function_macro_namespace = <<'END_OF_DECLARE_FUNCTION_1_AND_2P_MACRO_NAMESPACE'; -#ifdef CINT_CONVERSION_WORKAROUND - -#define DECLARE_FUNCTION_1P(NAME) \ -extern const unsigned function_index_##NAME; \ -inline GiNaC::function NAME(const GiNaC::ex & p1) { \ - return GiNaC::function(function_index_##NAME, p1); \ -} \ -inline GiNaC::function NAME(const GiNaC::basic & p1) { \ - return GiNaC::function(function_index_##NAME, GiNaC::ex(p1)); \ -} -#define DECLARE_FUNCTION_2P(NAME) \ -extern const unsigned function_index_##NAME; \ -inline GiNaC::function NAME(const GiNaC::ex & p1, const GiNaC::ex & p2) { \ - return GiNaC::function(function_index_##NAME, p1, p2); \ -} \ -inline GiNaC::function NAME(const GiNaC::basic & p1, const GiNaC::ex & p2) { \ - return GiNaC::function(function_index_##NAME, GiNaC::ex(p1), p2); \ -} \ -inline GiNaC::function NAME(const GiNaC::ex & p1, const GiNaC::basic & p2) { \ - return GiNaC::function(function_index_##NAME, p1, GiNaC::ex(p2)); \ -} \ -inline GiNaC::function NAME(const GiNaC::basic & p1, const GiNaC::basic & p2) { \ - return GiNaC::function(function_index_##NAME, GiNaC::ex(p1), GiNaC::ex(p2)); \ -} - -#else // def CINT_CONVERSION_WORKAROUND - #define DECLARE_FUNCTION_1P(NAME) \ extern const unsigned function_index_##NAME; \ inline GiNaC::function NAME(const GiNaC::ex & p1) { \ @@ -73,8 +46,6 @@ inline GiNaC::function NAME(const GiNaC::ex & p1, const GiNaC::ex & p2) { \ return GiNaC::function(function_index_##NAME, p1, p2); \ } -#endif // def CINT_CONVERSION_WORKAROUND - END_OF_DECLARE_FUNCTION_1_AND_2P_MACRO_NAMESPACE $declare_function_macro_namespace .= generate_from_to( @@ -88,33 +59,6 @@ inline GiNaC::function NAME(${SEQ1}) { \\ END_OF_DECLARE_FUNCTION_MACRO_NAMESPACE $declare_function_macro_no_namespace = <<'END_OF_DECLARE_FUNCTION_1_AND_2P_MACRO_NO_NAMESPACE'; -#ifdef CINT_CONVERSION_WORKAROUND - -#define DECLARE_FUNCTION_1P(NAME) \ -extern const unsigned function_index_##NAME; \ -inline function NAME(const ex & p1) { \ - return function(function_index_##NAME, p1); \ -} \ -inline function NAME(const basic & p1) { \ - return function(function_index_##NAME, ex(p1)); \ -} -#define DECLARE_FUNCTION_2P(NAME) \ -extern const unsigned function_index_##NAME; \ -inline function NAME(const ex & p1, const ex & p2) { \ - return function(function_index_##NAME, p1, p2); \ -} \ -inline function NAME(const basic & p1, const ex & p2) { \ - return function(function_index_##NAME, ex(p1), p2); \ -} \ -inline function NAME(const ex & p1, const basic & p2) { \ - return function(function_index_##NAME, p1, ex(p2)); \ -} \ -inline function NAME(const basic & p1, const basic & p2) { \ - return function(function_index_##NAME, ex(p1), ex(p2)); \ -} - -#else // def CINT_CONVERSION_WORKAROUND - #define DECLARE_FUNCTION_1P(NAME) \ extern const unsigned function_index_##NAME; \ inline function NAME(const ex & p1) { \ @@ -126,8 +70,6 @@ inline function NAME(const ex & p1, const ex & p2) { \ return function(function_index_##NAME, p1, p2); \ } -#endif // def CINT_CONVERSION_WORKAROUND - END_OF_DECLARE_FUNCTION_1_AND_2P_MACRO_NO_NAMESPACE $declare_function_macro_no_namespace .= generate_from_to( diff --git a/ginac/numeric.h b/ginac/numeric.h index 51ee5e8f..fc45a5d8 100644 --- a/ginac/numeric.h +++ b/ginac/numeric.h @@ -256,13 +256,6 @@ numeric isqrt(const numeric & x); numeric gcd(const numeric & a, const numeric & b); numeric lcm(const numeric & a, const numeric & b); -/** Exception thrown by numeric members to signal failure */ -struct numeric_fail -{ - int failval; - numeric_fail(int n) { failval = n; } -}; - // wrapper functions around member functions inline numeric pow(const numeric & x, const numeric & y) { return x.power(y); } diff --git a/ginac/operators.cpp b/ginac/operators.cpp index ea256a8e..f901760e 100644 --- a/ginac/operators.cpp +++ b/ginac/operators.cpp @@ -58,7 +58,7 @@ ex operator*(const ex & lh, const ex & rh) ex operator/(const ex & lh, const ex & rh) { - debugmsg("operator*(ex,ex)",LOGLEVEL_OPERATOR); + debugmsg("operator/(ex,ex)",LOGLEVEL_OPERATOR); return lh.exmul(power(rh,_ex_1())); } @@ -159,27 +159,32 @@ const numeric & operator/=(numeric & lh, const numeric & rh) ex operator+(const ex & lh) { + debugmsg("operator+(ex)",LOGLEVEL_OPERATOR); return lh; } ex operator-(const ex & lh) { + debugmsg("operator-(ex)",LOGLEVEL_OPERATOR); return lh.exmul(_ex_1()); } numeric operator+(const numeric & lh) { + debugmsg("operator+(numeric)",LOGLEVEL_OPERATOR); return lh; } numeric operator-(const numeric & lh) { + debugmsg("operator-(numeric)",LOGLEVEL_OPERATOR); return _num_1()*lh; } /** Numeric prefix increment. Adds 1 and returns incremented number. */ numeric& operator++(numeric & rh) { + debugmsg("operator++(numeric)",LOGLEVEL_OPERATOR); rh = rh+_num1(); return rh; } @@ -187,6 +192,7 @@ numeric& operator++(numeric & rh) /** Numeric prefix decrement. Subtracts 1 and returns decremented number. */ numeric& operator--(numeric & rh) { + debugmsg("operator--(numeric)",LOGLEVEL_OPERATOR); rh = rh-_num1(); return rh; } @@ -195,6 +201,7 @@ numeric& operator--(numeric & rh) * incremented by 1. */ numeric operator++(numeric & lh, int) { + debugmsg("operator++(numeric,int)",LOGLEVEL_OPERATOR); numeric tmp = lh; lh = lh+_num1(); return tmp; @@ -204,6 +211,7 @@ numeric operator++(numeric & lh, int) * decremented by 1. */ numeric operator--(numeric & lh, int) { + debugmsg("operator--(numeric,int)",LOGLEVEL_OPERATOR); numeric tmp = lh; lh = lh-_num1(); return tmp; @@ -247,86 +255,6 @@ relational operator>=(const ex & lh, const ex & rh) return relational(lh,rh,relational::greater_or_equal); } -/* - -// binary relational operators ex with numeric - -relational operator==(const ex & lh, const numeric & rh) -{ - debugmsg("operator==(ex,numeric)",LOGLEVEL_OPERATOR); - return relational(lh,rh,relational::equal); -} - -relational operator!=(const ex & lh, const numeric & rh) -{ - debugmsg("operator!=(ex,numeric)",LOGLEVEL_OPERATOR); - return relational(lh,rh,relational::not_equal); -} - -relational operator<(const ex & lh, const numeric & rh) -{ - debugmsg("operator<(ex,numeric)",LOGLEVEL_OPERATOR); - return relational(lh,rh,relational::less); -} - -relational operator<=(const ex & lh, const numeric & rh) -{ - debugmsg("operator<=(ex,numeric)",LOGLEVEL_OPERATOR); - return relational(lh,rh,relational::less_or_equal); -} - -relational operator>(const ex & lh, const numeric & rh) -{ - debugmsg("operator>(ex,numeric)",LOGLEVEL_OPERATOR); - return relational(lh,rh,relational::greater); -} - -relational operator>=(const ex & lh, const numeric & rh) -{ - debugmsg("operator>=(ex,numeric)",LOGLEVEL_OPERATOR); - return relational(lh,rh,relational::greater_or_equal); -} - -// binary relational operators numeric with ex - -relational operator==(const numeric & lh, const ex & rh) -{ - debugmsg("operator==(numeric,ex)",LOGLEVEL_OPERATOR); - return relational(lh,rh,relational::equal); -} - -relational operator!=(const numeric & lh, const ex & rh) -{ - debugmsg("operator!=(numeric,ex)",LOGLEVEL_OPERATOR); - return relational(lh,rh,relational::not_equal); -} - -relational operator<(const numeric & lh, const ex & rh) -{ - debugmsg("operator<(numeric,ex)",LOGLEVEL_OPERATOR); - return relational(lh,rh,relational::less); -} - -relational operator<=(const numeric & lh, const ex & rh) -{ - debugmsg("operator<=(numeric,ex)",LOGLEVEL_OPERATOR); - return relational(lh,rh,relational::less_or_equal); -} - -relational operator>(const numeric & lh, const ex & rh) -{ - debugmsg("operator>(numeric,ex)",LOGLEVEL_OPERATOR); - return relational(lh,rh,relational::greater); -} - -relational operator>=(const numeric & lh, const ex & rh) -{ - debugmsg("operator>=(numeric,ex)",LOGLEVEL_OPERATOR); - return relational(lh,rh,relational::greater_or_equal); -} - -*/ - // input/output stream operators ostream & operator<<(ostream & os, const ex & e) -- 2.44.0