X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?a=blobdiff_plain;f=ginac%2Fmatrix.h;h=53afeb2e6e05c8ab4448ec4f746c3bd39775db82;hb=9d8d0f4924171b0acb7ec6a333897fe1ec545707;hp=37dffa42d74c64e1c816ead91ee18b4389d7f384;hpb=19c8f943c15dcc0d946fb4d5fef11e487d34857a;p=ginac.git diff --git a/ginac/matrix.h b/ginac/matrix.h index 37dffa42..53afeb2e 100644 --- a/ginac/matrix.h +++ b/ginac/matrix.h @@ -3,7 +3,7 @@ * Interface to symbolic matrices */ /* - * GiNaC Copyright (C) 1999-2000 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2001 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 @@ -27,38 +27,20 @@ #include "basic.h" #include "ex.h" -#ifndef NO_NAMESPACE_GINAC namespace GiNaC { -#endif // ndef NO_NAMESPACE_GINAC /** Symbolic matrices. */ class matrix : public basic { GINAC_DECLARE_REGISTERED_CLASS(matrix, basic) - -// friends -// (none) -// member functions - - // default constructor, destructor, copy constructor, assignment operator - // and helpers: -public: - matrix(); - ~matrix(); - matrix(const matrix & other); - const matrix & operator=(const matrix & other); -protected: - void copy(const matrix & other); - void destroy(bool call_parent); - - // other constructors + + // other ctors public: matrix(unsigned r, unsigned c); matrix(unsigned r, unsigned c, const exvector & m2); - + // functions overriding virtual functions from bases classes public: - basic * duplicate() const; void print(std::ostream & os, unsigned upper_precedence=0) const; void printraw(std::ostream & os) const; unsigned nops() const; @@ -68,18 +50,20 @@ public: bool has(const ex & other) const; ex eval(int level=0) const; ex evalf(int level=0) const; - // ex subs(const lst & ls, const lst & lr) const; + ex subs(const lst & ls, const lst & lr) const; + ex eval_indexed(const basic & i) const; + ex add_indexed(const ex & self, const ex & other) const; + bool contract_with(exvector::iterator self, exvector::iterator other, exvector & v) const; protected: - int compare_same_type(const basic & other) const; unsigned return_type(void) const { return return_types::noncommutative; }; // new virtual functions which can be overridden by derived classes // (none) // non-virtual functions in this class public: - unsigned rows(void) const //! Get number of rows. + unsigned rows(void) const /// Get number of rows. { return row; } - unsigned cols(void) const //! Get number of columns. + unsigned cols(void) const /// Get number of columns. { return col; } matrix add(const matrix & other) const; matrix sub(const matrix & other) const; @@ -102,33 +86,28 @@ protected: // member variables protected: - unsigned row; /**< number of rows */ - unsigned col; /**< number of columns */ - exvector m; /**< representation (cols indexed first) */ + unsigned row; ///< number of rows + unsigned col; ///< number of columns + exvector m; ///< representation (cols indexed first) static unsigned precedence; }; -// global constants -extern const matrix some_matrix; -extern const type_info & typeid_matrix; - - // wrapper functions around member functions inline unsigned nops(const matrix & m) { return m.nops(); } -inline ex expand(const matrix & m, unsigned options=0) +inline ex expand(const matrix & m, unsigned options = 0) { return m.expand(options); } inline bool has(const matrix & m, const ex & other) { return m.has(other); } -inline ex eval(const matrix & m, int level=0) +inline ex eval(const matrix & m, int level = 0) { return m.eval(level); } -inline ex evalf(const matrix & m, int level=0) +inline ex evalf(const matrix & m, int level = 0) { return m.evalf(level); } inline unsigned rows(const matrix & m) @@ -160,8 +139,6 @@ inline const matrix &ex_to_matrix(const ex &e) extern ex lst_to_matrix(const ex &l); -#ifndef NO_NAMESPACE_GINAC } // namespace GiNaC -#endif // ndef NO_NAMESPACE_GINAC #endif // ndef __GINAC_MATRIX_H__