- switched to automake build environment
[ginac.git] / ginac / lst.h
1 /** @file lst.h
2  *
3  *  Definition of GiNaC's lst. 
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=lst
7  *                        $STLHEADER=list
8  *                        $reserve=0
9  *                        $prepend=1
10  *                        $let_op=1
11  *                        $open_bracket=[
12  *                        $close_bracket=] */
13
14 #ifndef _LST_H_
15 #define _LST_H_
16
17 #include <list>
18
19 #include <ginac/ginac.h>
20
21 typedef list<ex> exlist;
22
23 class lst : public basic
24 {
25
26 public:
27     lst();
28     ~lst();
29     lst(lst const & other);
30     lst const & operator=(lst const & other);
31 protected:
32     void copy(lst const & other);
33     void destroy(bool call_parent);
34
35 public:
36     lst(exlist const & s, bool discardable=0);
37     lst(exlist * vp); // vp will be deleted
38     explicit lst(ex const & e1);
39     explicit lst(ex const & e1, ex const & e2);
40     explicit lst(ex const & e1, ex const & e2, ex const & e3);
41     explicit lst(ex const & e1, ex const & e2, ex const & e3,
42              ex const & e4);
43     explicit lst(ex const & e1, ex const & e2, ex const & e3,
44              ex const & e4, ex const & e5);
45     explicit lst(ex const & e1, ex const & e2, ex const & e3,
46              ex const & e4, ex const & e5, ex const & e6);
47     explicit lst(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 lst(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 lst(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 lst(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 lst & append(ex const & b);
84     virtual lst & prepend(ex const & b);
85
86 protected:
87     virtual void printseq(ostream & os, char openbracket, char delim,
88                           char closebracket, unsigned this_precedence,
89                           unsigned upper_precedence=0) const;
90     virtual ex thislst(exlist const & v) const;
91     virtual ex thislst(exlist * vp) const;
92
93 protected:
94     bool is_canonical() const;
95     exlist evalchildren(int level) const;
96     exlist evalfchildren(int level) const;
97     exlist normalchildren(int level) const;
98     exlist diffchildren(symbol const & s) const;
99     exlist * subschildren(lst const & ls, lst const & lr) const;
100
101 protected:
102     exlist seq;
103     static unsigned precedence;
104 };
105
106 // global constants
107
108 extern const lst some_lst;
109 extern type_info const & typeid_lst;
110
111 // macros
112
113 #define ex_to_lst(X) (static_cast<lst const &>(*(X).bp))
114
115 #endif // ndef _LST_H_
116