]> www.ginac.de Git - ginac.git/blob - ginac/relational.h
317b1d23523f041e067013ab984bf9af7f3bc56d
[ginac.git] / ginac / relational.h
1 /** @file relational.h
2  *
3  *  Interface to relations between expressions. */
4
5 /*
6  *  GiNaC Copyright (C) 1999 Johannes Gutenberg University Mainz, Germany
7  *
8  *  This program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation; either version 2 of the License, or
11  *  (at your option) any later version.
12  *
13  *  This program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with this program; if not, write to the Free Software
20  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  */
22
23 #ifndef __GINAC_RELATIONAL_H__
24 #define __GINAC_RELATIONAL_H__
25
26 #include <ginac/basic.h>
27 #include <ginac/ex.h>
28
29 /** This class holds a relation consisting of two expressions and a logical
30  *  relation between them. */
31 class relational : public basic
32 {
33
34 // types
35 public:
36     enum operators { equal,
37            not_equal,
38            less,
39            less_or_equal,
40            greater,
41            greater_or_equal
42     };
43     
44 // member functions
45
46     // default constructor, destructor, copy constructor assignment operator and helpers
47 public:
48     relational();
49     ~relational();
50     relational(relational const & other);
51     relational const & operator=(relational const & other);
52 protected:
53     void copy(relational const & other);
54     void destroy(bool call_parent);
55
56     // other constructors
57 public:
58     relational(ex const & lhs, ex const & rhs, operators oper=equal);
59     
60     // functions overriding virtual functions from bases classes
61 public:
62     basic * duplicate() const;
63     void printraw(ostream & os) const;
64     void print(ostream & os, unsigned upper_precedence=0) const;
65     void printcsrc(ostream & os, unsigned type, unsigned upper_precedence=0) const;
66     bool info(unsigned inf) const;
67     int nops() const;
68     ex & let_op(int const i);
69     ex eval(int level=0) const;
70     ex evalf(int level=0) const;
71     ex simplify_ncmul(exvector const & v) const;
72 protected:
73     int compare_same_type(basic const & other) const;
74     unsigned return_type(void) const;
75     unsigned return_type_tinfo(void) const;
76
77     // new virtual functions which can be overridden by derived classes
78     // none
79
80     // non-virtual functions in this class
81 public:
82     operator bool(void) const;
83     
84 // member variables
85     
86 protected:
87     ex lh;
88     ex rh;
89     operators o;
90     static unsigned precedence;
91 };
92
93 // global constants
94
95 extern const relational some_relational;
96 extern type_info const & typeid_relational;
97
98 #define ex_to_relational(X) static_cast<relational const &>(*(X).bp)
99
100 #endif // ndef __GINAC_RELATIONAL_H__
101
102