1 ///////////////////////////////////////////////////////////////////////////////
2 // This file is generated automatically using Prop (version 2.3.6),
3 // last updated on Nov 2, 1999.
4 // The original source file is "timespace.ph".
5 ///////////////////////////////////////////////////////////////////////////////
8 ///////////////////////////////////////////////////////////////////////////////
10 // This file describes the structure of the time and space complexity
11 // datatypes. These datatypes are used to represent time and space
12 // complexity in the SETL-like extension language.
14 ///////////////////////////////////////////////////////////////////////////////
15 #ifndef time_and_space_complexity_h
16 #define time_and_space_complexity_h
21 ///////////////////////////////////////////////////////////////////////////////
23 // Complexity expression is represented by the datatype Complexity.
25 ///////////////////////////////////////////////////////////////////////////////
26 #line 25 "timespace.ph"
27 #line 50 "timespace.ph"
28 ///////////////////////////////////////////////////////////////////////////////
30 // Forward class definition for Complexity
32 ///////////////////////////////////////////////////////////////////////////////
33 #ifndef datatype_Complexity_defined
34 #define datatype_Complexity_defined
36 typedef a_Complexity
* Complexity
;
39 ///////////////////////////////////////////////////////////////////////////////
41 // Forward class definition for Time
43 ///////////////////////////////////////////////////////////////////////////////
44 #ifndef datatype_Time_defined
45 #define datatype_Time_defined
47 typedef a_Time
* Time
;
50 ///////////////////////////////////////////////////////////////////////////////
52 // Forward class definition for Space
54 ///////////////////////////////////////////////////////////////////////////////
55 #ifndef datatype_Space_defined
56 #define datatype_Space_defined
58 typedef a_Space
* Space
;
61 ///////////////////////////////////////////////////////////////////////////////
63 // Base class for datatype Complexity
65 ///////////////////////////////////////////////////////////////////////////////
66 class a_Complexity
: public MEM
{
69 tag_Var
= 0, tag_Add
= 1, tag_Mul
= 2,
70 tag_Div
= 3, tag_Power
= 4, tag_Log
= 5,
71 tag_Const
= 6, tag_BigOh
= 7, tag_Omega
= 8,
76 const Tag_Complexity tag__
; // variant tag
78 inline a_Complexity(Tag_Complexity t__
) : tag__(t__
) {}
81 inline int boxed(const a_Complexity
*) { return 1; }
82 inline int untag(const a_Complexity
* x
) { return x
->tag__
; }
83 ///////////////////////////////////////////////////////////////////////////////
85 // Class for datatype constructor Complexity::Var
87 ///////////////////////////////////////////////////////////////////////////////
88 class Complexity_Var
: public a_Complexity
{
90 #line 25 "timespace.ph"
92 Complexity_Var (Id x_Var
);
95 ///////////////////////////////////////////////////////////////////////////////
97 // Class for datatype constructor Complexity::Add
99 ///////////////////////////////////////////////////////////////////////////////
100 class Complexity_Add
: public a_Complexity
{
102 #line 27 "timespace.ph"
103 Complexity _1
; Complexity _2
;
104 Complexity_Add (Complexity x_1
, Complexity x_2
);
107 ///////////////////////////////////////////////////////////////////////////////
109 // Class for datatype constructor Complexity::Mul
111 ///////////////////////////////////////////////////////////////////////////////
112 class Complexity_Mul
: public a_Complexity
{
114 #line 28 "timespace.ph"
115 Complexity _1
; Complexity _2
;
116 Complexity_Mul (Complexity x_1
, Complexity x_2
);
119 ///////////////////////////////////////////////////////////////////////////////
121 // Class for datatype constructor Complexity::Div
123 ///////////////////////////////////////////////////////////////////////////////
124 class Complexity_Div
: public a_Complexity
{
126 #line 29 "timespace.ph"
127 Complexity _1
; Complexity _2
;
128 Complexity_Div (Complexity x_1
, Complexity x_2
);
131 ///////////////////////////////////////////////////////////////////////////////
133 // Class for datatype constructor Complexity::Power
135 ///////////////////////////////////////////////////////////////////////////////
136 class Complexity_Power
: public a_Complexity
{
138 #line 30 "timespace.ph"
139 Complexity _1
; Complexity _2
;
140 Complexity_Power (Complexity x_1
, Complexity x_2
);
143 ///////////////////////////////////////////////////////////////////////////////
145 // Class for datatype constructor Complexity::Log
147 ///////////////////////////////////////////////////////////////////////////////
148 class Complexity_Log
: public a_Complexity
{
150 #line 31 "timespace.ph"
152 Complexity_Log (Complexity x_Log
);
155 ///////////////////////////////////////////////////////////////////////////////
157 // Class for datatype constructor Complexity::Const
159 ///////////////////////////////////////////////////////////////////////////////
160 class Complexity_Const
: public a_Complexity
{
162 #line 32 "timespace.ph"
164 Complexity_Const (double x_Const
);
167 ///////////////////////////////////////////////////////////////////////////////
169 // Class for datatype constructor Complexity::BigOh
171 ///////////////////////////////////////////////////////////////////////////////
172 class Complexity_BigOh
: public a_Complexity
{
174 #line 33 "timespace.ph"
176 Complexity_BigOh (Complexity x_BigOh
);
179 ///////////////////////////////////////////////////////////////////////////////
181 // Class for datatype constructor Complexity::Omega
183 ///////////////////////////////////////////////////////////////////////////////
184 class Complexity_Omega
: public a_Complexity
{
186 #line 34 "timespace.ph"
188 Complexity_Omega (Complexity x_Omega
);
191 ///////////////////////////////////////////////////////////////////////////////
193 // Class for datatype constructor Complexity::LittleOh
195 ///////////////////////////////////////////////////////////////////////////////
196 class Complexity_LittleOh
: public a_Complexity
{
198 #line 35 "timespace.ph"
200 Complexity_LittleOh (Complexity x_LittleOh
);
203 ///////////////////////////////////////////////////////////////////////////////
205 // Datatype constructor functions for Complexity
207 ///////////////////////////////////////////////////////////////////////////////
208 extern a_Complexity
* Var (Id x_Var
);
209 extern a_Complexity
* Add (Complexity x_1
, Complexity x_2
);
210 extern a_Complexity
* Mul (Complexity x_1
, Complexity x_2
);
211 extern a_Complexity
* Div (Complexity x_1
, Complexity x_2
);
212 extern a_Complexity
* Power (Complexity x_1
, Complexity x_2
);
213 extern a_Complexity
* Log (Complexity x_Log
);
214 extern a_Complexity
* Const (double x_Const
);
215 extern a_Complexity
* BigOh (Complexity x_BigOh
);
216 extern a_Complexity
* Omega (Complexity x_Omega
);
217 extern a_Complexity
* LittleOh (Complexity x_LittleOh
);
219 ///////////////////////////////////////////////////////////////////////////////
221 // Class for datatype constructor Time::TIME
223 ///////////////////////////////////////////////////////////////////////////////
224 class a_Time
: public MEM
{
226 #line 42 "timespace.ph"
228 a_Time (Complexity x_TIME
);
230 inline int boxed(const a_Time
*) { return 1; }
231 inline int untag(const a_Time
*) { return 0; }
232 ///////////////////////////////////////////////////////////////////////////////
234 // Datatype constructor functions for Time
236 ///////////////////////////////////////////////////////////////////////////////
237 extern a_Time
* TIME (Complexity x_TIME
);
239 ///////////////////////////////////////////////////////////////////////////////
241 // Class for datatype constructor Space::SPACE
243 ///////////////////////////////////////////////////////////////////////////////
244 class a_Space
: public MEM
{
246 #line 49 "timespace.ph"
248 a_Space (Complexity x_SPACE
);
250 inline int boxed(const a_Space
*) { return 1; }
251 inline int untag(const a_Space
*) { return 0; }
252 ///////////////////////////////////////////////////////////////////////////////
254 // Datatype constructor functions for Space
256 ///////////////////////////////////////////////////////////////////////////////
257 extern a_Space
* SPACE (Complexity x_SPACE
);
259 #line 50 "timespace.ph"
260 #line 50 "timespace.ph"
263 ///////////////////////////////////////////////////////////////////////////////
265 // Pretty printing routines.
267 ///////////////////////////////////////////////////////////////////////////////
268 extern std::ostream
& operator << (std::ostream
&, Complexity
);
269 extern std::ostream
& operator << (std::ostream
&, Time
);
270 extern std::ostream
& operator << (std::ostream
&, Space
);
272 ///////////////////////////////////////////////////////////////////////////////
274 // Functions to simplify and manipulate complexity expressions.
276 ///////////////////////////////////////////////////////////////////////////////
277 extern Complexity
simplify (Complexity
);
280 #line 69 "timespace.ph"
282 ------------------------------- Statistics -------------------------------
283 Merge matching rules = yes
284 Number of DFA nodes merged = 0
285 Number of ifs generated = 0
286 Number of switches generated = 0
289 Adaptive matching = enabled
290 Fast string matching = disabled
291 Inline downcasts = enabled
292 --------------------------------------------------------------------------