X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Fexpairseq.h;h=13e0d161312d89fa38e98a3418f597b6e6124caf;hp=fac36eec47072e41080e68b7559818b8517ba061;hb=a835de8cc61681f66b49f2bd944c0d7ad8157f77;hpb=e78622a06f749a124b007aa7b969de02fcc9c3d2 diff --git a/ginac/expairseq.h b/ginac/expairseq.h index fac36eec..13e0d161 100644 --- a/ginac/expairseq.h +++ b/ginac/expairseq.h @@ -3,7 +3,7 @@ * Interface to sequences of expression pairs. */ /* - * GiNaC Copyright (C) 1999-2001 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2003 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 @@ -44,7 +44,6 @@ namespace GiNaC { #define EXPAIRSEQ_USE_HASHTAB 0 typedef std::vector epvector; ///< expair-vector -typedef epvector::iterator epviter; ///< expair-vector iterator typedef epvector::iterator epp; ///< expair-vector pointer typedef std::list epplist; ///< list of expair-vector pointers typedef std::vector epplistvector; ///< vector of epplist @@ -64,7 +63,7 @@ class expairseq : public basic // member functions - // default ctor, dtor, copy ctor assignment operator and helpers + // default ctor, dtor, copy ctor, assignment operator and helpers public: expairseq() : basic(TINFO_expairseq) #if EXPAIRSEQ_USE_HASHTAB @@ -84,7 +83,7 @@ public: expairseq(const epvector & v, const ex & oc); expairseq(epvector * vp, const ex & oc); // vp will be deleted - // functions overriding virtual functions from bases classes + // functions overriding virtual functions from base classes public: basic * duplicate() const; void print(const print_context & c, unsigned level = 0) const; @@ -93,13 +92,12 @@ public: unsigned nops() const; ex op(int i) const; ex & let_op(int i); + ex map(map_function & f) const; ex eval(int level=0) const; - ex evalf(int level=0) const; - ex normal(lst &sym_lst, lst &repl_lst, int level=0) const; ex to_rational(lst &repl_lst) const; - ex subs(const lst & ls, const lst & lr) const; + bool match(const ex & pattern, lst & repl_lst) const; + ex subs(const lst & ls, const lst & lr, bool no_pattern = false) 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 return_type(void) const; @@ -149,7 +147,7 @@ protected: void remove_hashtab_entry(epvector::const_iterator element); void move_hashtab_entry(epvector::const_iterator oldpos, epvector::iterator newpos); - void sorted_insert(epplist & eppl, epp elem); + void sorted_insert(epplist & eppl, epvector::const_iterator elem); void build_hashtab_and_combine(epvector::iterator & first_numeric, epvector::iterator & last_non_zero, vector & touched, @@ -165,10 +163,7 @@ protected: bool is_canonical() const; epvector * expandchildren(unsigned options) const; epvector * evalchildren(int level) const; - epvector evalfchildren(int level) const; - epvector normalchildren(int level) const; - epvector diffchildren(const symbol & s) const; - epvector * subschildren(const lst & ls, const lst & lr) const; + epvector * subschildren(const lst & ls, const lst & lr, bool no_pattern = false) const; // member variables @@ -186,9 +181,11 @@ protected: }; // utility functions -inline const expairseq &ex_to_expairseq(const ex &e) + +/** Specialization of is_exactly_a(obj) for expairseq objects. */ +template<> inline bool is_exactly_a(const basic & obj) { - return static_cast(*e.bp); + return obj.tinfo()==TINFO_expairseq; } } // namespace GiNaC