- introduced info_flag::algebraic.
[ginac.git] / ginac / flags.h
1 /** @file flags.h
2  *
3  *  Collection of all flags used through the GiNaC framework. */
4
5 /*
6  *  GiNaC Copyright (C) 1999-2000 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_FLAGS_H__
24 #define __GINAC_FLAGS_H__
25
26 #ifndef NO_NAMESPACE_GINAC
27 namespace GiNaC {
28 #endif // ndef NO_NAMESPACE_GINAC
29
30 class expand_options {
31 public:
32     enum { expand_trigonometric      = 0x0001
33          };
34 };
35
36 class status_flags {
37 public:
38     enum { dynallocated              = 0x0001,
39            evaluated                 = 0x0002,
40            expanded                  = 0x0004,
41            hash_calculated           = 0x0008
42          };
43 };
44
45 /** Possible attributes an object can have. */
46 class info_flags {
47 public:
48     enum {
49            // answered by class numeric
50            numeric,
51            real,
52            rational,
53            integer,
54            crational,
55            cinteger,
56            positive,
57            negative,
58            nonnegative,
59            posint,
60            negint,
61            nonnegint,
62            even,
63            odd,
64            prime,
65            
66            // answered by class relation
67            relation,
68            relation_equal,
69            relation_not_equal,
70            relation_less,
71            relation_less_or_equal,
72            relation_greater,
73            relation_greater_or_equal,
74            
75            // answered by class symbol
76            symbol,
77            
78            // answered by class lst
79            list,
80            
81            // answered by class exprseq
82            exprseq,
83            
84            // answered by classes numeric, symbol, add, mul, power
85            polynomial,
86            integer_polynomial,
87            cinteger_polynomial,
88            rational_polynomial,
89            crational_polynomial,
90            rational_function,
91            algebraic,
92            
93            // answered by class indexed
94            indexed,      // class can carry indices
95            has_indices,  // object has at least one index
96            
97            // answered by class idx
98            idx,
99            
100            // answered by class coloridx
101            coloridx,
102            
103            // answered by class lorentzidx
104            lorentzidx
105     };
106 };
107
108 class return_types {
109 public:
110     enum { commutative, noncommutative, noncommutative_composite};
111 };
112
113 class csrc_types {
114 public:
115         enum {
116                 ctype_float,
117                 ctype_double,
118                 ctype_cl_N
119         };
120 };
121
122 class remember_strategies {
123 public:
124     enum { delete_never, // let table grow undefinitely, not recommmended, but currently default
125            delete_lru,   // least recently used
126            delete_lfu,   // least frequently used
127            delete_cyclic // first one in list (oldest)
128     };
129 };
130
131 #ifndef NO_NAMESPACE_GINAC
132 } // namespace GiNaC
133 #endif // ndef NO_NAMESPACE_GINAC
134
135 #endif // ndef __GINAC_FLAGS_H__