X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Fseries.h;h=a8a7ebf815fb3889fa363360d13118ec07274265;hp=89b912677b9c04fac040931c1f96431133763705;hb=26741891dadf23162799009b6fd57b4984bd4ce5;hpb=6b3768e8c544739ae53321539cb4d1e3112ded1b diff --git a/ginac/series.h b/ginac/series.h index 89b91267..a8a7ebf8 100644 --- a/ginac/series.h +++ b/ginac/series.h @@ -2,14 +2,33 @@ * * Interface to class for extended truncated power series. */ -#ifndef _SERIES_H_ -#define _SERIES_H_ +/* + * GiNaC Copyright (C) 1999 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ -#include "basic.h" -#include "ex.h" -#include "expairseq.h" -#include "symbol.h" +#ifndef __GINAC_SERIES_H__ +#define __GINAC_SERIES_H__ +#include +#include + +#ifndef NO_GINAC_NAMESPACE +namespace GiNaC { +#endif // ndef NO_GINAC_NAMESPACE /** This class holds a extended truncated power series (positive and negative * integer powers). It consists of expression coefficients (only non-zero @@ -36,8 +55,8 @@ public: // functions overriding virtual functions from base classes public: basic *duplicate() const; - void printraw(ostream &os) const; void print(ostream &os, unsigned upper_precedence=0) const; + void printraw(ostream &os) const; int degree(symbol const &s) const; int ldegree(symbol const &s) const; ex coeff(symbol const &s, int const n=1) const; @@ -71,7 +90,33 @@ protected: extern const series some_series; extern type_info const & typeid_series; -#define ex_to_series(X) (static_cast(*(X).bp)) -#define series_to_poly(X) (static_cast(*(X).bp).convert_to_poly(true)) +/** Return a reference to the series object embedded in an expression. + * The result is undefined if the expression does not contain a series + * object at its top level. + * + * @param e expression + * @return reference to series object + * @see is_ex_of_type */ +inline const series &ex_to_series(const ex &e) +{ + return static_cast(*e.bp); +} + +/** Convert the series object embedded in an expression to an ordinary + * polynomial in the expansion variable. The result is undefined if the + * expression does not contain a series object at its top level. + * + * @param e expression + * @return polynomial expression + * @see is_ex_of_type + * @see series::convert_to_poly */ +inline ex series_to_poly(const ex &e) +{ + return (static_cast(*e.bp).convert_to_poly(true)); +} + +#ifndef NO_GINAC_NAMESPACE +} // namespace GiNaC +#endif // ndef NO_GINAC_NAMESPACE -#endif +#endif // ndef __GINAC_SERIES_H__