- switched to automake build environment
[ginac.git] / ginac / exprseq.h
1 /** @file exprseq.h
2  *
3  *  Definition of GiNaC's exprseq. 
4  *  This file was generated automatically by container.pl.
5  *  Please do not modify it directly, edit the perl script instead!
6  *  container.pl options: $CONTAINER=exprseq
7  *                        $STLHEADER=vector
8  *                        $reserve=1
9  *                        $prepend=0
10  *                        $let_op=0
11  *                        $open_bracket=(
12  *                        $close_bracket=) */
13
14 #ifndef _EXPRSEQ_H_
15 #define _EXPRSEQ_H_
16
17 #include <vector>
18
19 #include <ginac/ginac.h>
20
21 typedef vector<ex> exvector;
22
23 class exprseq : public basic
24 {
25
26 public:
27     exprseq();
28     ~exprseq();
29     exprseq(exprseq const & other);
30     exprseq const & operator=(exprseq const & other);
31 protected:
32     void copy(exprseq const & other);
33     void destroy(bool call_parent);
34
35 public:
36     exprseq(exvector const & s, bool discardable=0);
37     exprseq(exvector * vp); // vp will be deleted
38     explicit exprseq(ex const & e1);
39     explicit exprseq(ex const & e1, ex const & e2);
40     explicit exprseq(ex const & e1, ex const & e2, ex const & e3);
41     explicit exprseq(ex const & e1, ex const & e2, ex const & e3,
42              ex const & e4);
43     explicit exprseq(ex const & e1, ex const & e2, ex const & e3,
44              ex const & e4, ex const & e5);
45     explicit exprseq(ex const & e1, ex const & e2, ex const & e3,
46              ex const & e4, ex const & e5, ex const & e6);
47     explicit exprseq(ex const & e1, ex const & e2, ex const & e3,
48              ex const & e4, ex const & e5, ex const & e6,
49              ex const & e7);
50     explicit exprseq(ex const & e1, ex const & e2, ex const & e3,
51              ex const & e4, ex const & e5, ex const & e6,
52              ex const & e7, ex const & e8);
53     explicit exprseq(ex const & e1, ex const & e2, ex const & e3,
54              ex const & e4, ex const & e5, ex const & e6,
55              ex const & e7, ex const & e8, ex const & e9);
56     explicit exprseq(ex const & e1, ex const & e2, ex const & e3,
57              ex const & e4, ex const & e5, ex const & e6,
58              ex const & e7, ex const & e8, ex const & e9,
59              ex const &e10);
60
61 public:
62     basic * duplicate() const;
63     void printraw(ostream & os) const;
64     void print(ostream & os, unsigned upper_precedence=0) const;
65     void printtree(ostream & os, unsigned indent) const;
66     bool info(unsigned inf) const;
67     int nops() const;
68     ex & let_op(int const i);
69     ex expand(unsigned options=0) const;
70     bool has(ex const & other) const;
71     ex eval(int level=0) const;
72     ex evalf(int level=0) const;
73     ex normal(lst &sym_lst, lst &repl_lst, int level=0) const;
74     ex diff(symbol const & s) const;
75     ex subs(lst const & ls, lst const & lr) const;
76 protected:
77     int compare_same_type(basic const & other) const;
78     bool is_equal_same_type(basic const & other) const;
79     unsigned return_type(void) const;
80
81     // new virtual functions which can be overridden by derived classes
82 public:
83     virtual exprseq & append(ex const & b);
84     // no prepend possible for exprseq
85 protected:
86     virtual void printseq(ostream & os, char openbracket, char delim,
87                           char closebracket, unsigned this_precedence,
88                           unsigned upper_precedence=0) const;
89     virtual ex thisexprseq(exvector const & v) const;
90     virtual ex thisexprseq(exvector * vp) const;
91
92 protected:
93     bool is_canonical() const;
94     exvector evalchildren(int level) const;
95     exvector evalfchildren(int level) const;
96     exvector normalchildren(int level) const;
97     exvector diffchildren(symbol const & s) const;
98     exvector * subschildren(lst const & ls, lst const & lr) const;
99
100 protected:
101     exvector seq;
102     static unsigned precedence;
103 };
104
105 // global constants
106
107 extern const exprseq some_exprseq;
108 extern type_info const & typeid_exprseq;
109
110 // macros
111
112 #define ex_to_exprseq(X) (static_cast<exprseq const &>(*(X).bp))
113
114 #endif // ndef _EXPRSEQ_H_
115