annotate gcc/testsuite/g++.old-deja/g++.mike/p784.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // { dg-do assemble }
kono
parents:
diff changeset
2 // { dg-require-effective-target ilp32 } */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
3 // { dg-options "-w -fpermissive" }
111
kono
parents:
diff changeset
4 // prms-id: 784
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 //# 1 "GctSymbol.GctSymbol.CHMap.cc"
kono
parents:
diff changeset
7 // This may look like C code, but it is really -*- C++ -*-
kono
parents:
diff changeset
8 /*
kono
parents:
diff changeset
9 Copyright (C) 1988, 2000, 2002 Free Software Foundation
kono
parents:
diff changeset
10 written by Doug Lea (dl@rocky.oswego.edu)
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 This file is part of the GNU C++ Library. This library is free
kono
parents:
diff changeset
13 software; you can redistribute it and/or modify it under the terms of
kono
parents:
diff changeset
14 the GNU Library General Public License as published by the Free
kono
parents:
diff changeset
15 Software Foundation; either version 2 of the License, or (at your
kono
parents:
diff changeset
16 option) any later version. This library is distributed in the hope
kono
parents:
diff changeset
17 that it will be useful, but WITHOUT ANY WARRANTY; without even the
kono
parents:
diff changeset
18 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
kono
parents:
diff changeset
19 PURPOSE. See the GNU Library General Public License for more details.
kono
parents:
diff changeset
20 You should have received a copy of the GNU Library General Public
kono
parents:
diff changeset
21 License along with this library; if not, write to the Free Software
kono
parents:
diff changeset
22 Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
kono
parents:
diff changeset
23 */
kono
parents:
diff changeset
24
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 //#pragma implementation
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 //# 1 "GctSymbol.GctSymbol.CHMap.h" 1
kono
parents:
diff changeset
29 // This may look like C code, but it is really -*- C++ -*-
kono
parents:
diff changeset
30 /*
kono
parents:
diff changeset
31 Copyright (C) 1988 Free Software Foundation
kono
parents:
diff changeset
32 written by Doug Lea (dl@rocky.oswego.edu)
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 This file is part of the GNU C++ Library. This library is free
kono
parents:
diff changeset
35 software; you can redistribute it and/or modify it under the terms of
kono
parents:
diff changeset
36 the GNU Library General Public License as published by the Free
kono
parents:
diff changeset
37 Software Foundation; either version 2 of the License, or (at your
kono
parents:
diff changeset
38 option) any later version. This library is distributed in the hope
kono
parents:
diff changeset
39 that it will be useful, but WITHOUT ANY WARRANTY; without even the
kono
parents:
diff changeset
40 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
kono
parents:
diff changeset
41 PURPOSE. See the GNU Library General Public License for more details.
kono
parents:
diff changeset
42 You should have received a copy of the GNU Library General Public
kono
parents:
diff changeset
43 License along with this library; if not, write to the Free Software
kono
parents:
diff changeset
44 Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
kono
parents:
diff changeset
45 */
kono
parents:
diff changeset
46
kono
parents:
diff changeset
47
kono
parents:
diff changeset
48
kono
parents:
diff changeset
49
kono
parents:
diff changeset
50 //#pragma interface
kono
parents:
diff changeset
51
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53
kono
parents:
diff changeset
54 //# 1 "GctSymbol.GctSymbol.Map.h" 1
kono
parents:
diff changeset
55 // This may look like C code, but it is really -*- C++ -*-
kono
parents:
diff changeset
56 /*
kono
parents:
diff changeset
57 Copyright (C) 1988 Free Software Foundation
kono
parents:
diff changeset
58 written by Doug Lea (dl@rocky.oswego.edu)
kono
parents:
diff changeset
59
kono
parents:
diff changeset
60 This file is part of the GNU C++ Library. This library is free
kono
parents:
diff changeset
61 software; you can redistribute it and/or modify it under the terms of
kono
parents:
diff changeset
62 the GNU Library General Public License as published by the Free
kono
parents:
diff changeset
63 Software Foundation; either version 2 of the License, or (at your
kono
parents:
diff changeset
64 option) any later version. This library is distributed in the hope
kono
parents:
diff changeset
65 that it will be useful, but WITHOUT ANY WARRANTY; without even the
kono
parents:
diff changeset
66 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
kono
parents:
diff changeset
67 PURPOSE. See the GNU Library General Public License for more details.
kono
parents:
diff changeset
68 You should have received a copy of the GNU Library General Public
kono
parents:
diff changeset
69 License along with this library; if not, write to the Free Software
kono
parents:
diff changeset
70 Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
kono
parents:
diff changeset
71 */
kono
parents:
diff changeset
72
kono
parents:
diff changeset
73
kono
parents:
diff changeset
74
kono
parents:
diff changeset
75
kono
parents:
diff changeset
76 //#pragma interface
kono
parents:
diff changeset
77
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79
kono
parents:
diff changeset
80 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/Pix.h" 1
kono
parents:
diff changeset
81
kono
parents:
diff changeset
82
kono
parents:
diff changeset
83
kono
parents:
diff changeset
84 typedef void* Pix;
kono
parents:
diff changeset
85
kono
parents:
diff changeset
86 //# 26 "GctSymbol.GctSymbol.Map.h" 2
kono
parents:
diff changeset
87
kono
parents:
diff changeset
88 //# 1 "GctSymbol.defs.h" 1
kono
parents:
diff changeset
89 // This may look like C code, but it is really -*- C++ -*-
kono
parents:
diff changeset
90 /*
kono
parents:
diff changeset
91 Copyright (C) 1988 Free Software Foundation
kono
parents:
diff changeset
92 written by Doug Lea (dl@rocky.oswego.edu)
kono
parents:
diff changeset
93
kono
parents:
diff changeset
94 This file is part of the GNU C++ Library. This library is free
kono
parents:
diff changeset
95 software; you can redistribute it and/or modify it under the terms of
kono
parents:
diff changeset
96 the GNU Library General Public License as published by the Free
kono
parents:
diff changeset
97 Software Foundation; either version 2 of the License, or (at your
kono
parents:
diff changeset
98 option) any later version. This library is distributed in the hope
kono
parents:
diff changeset
99 that it will be useful, but WITHOUT ANY WARRANTY; without even the
kono
parents:
diff changeset
100 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
kono
parents:
diff changeset
101 PURPOSE. See the GNU Library General Public License for more details.
kono
parents:
diff changeset
102 You should have received a copy of the GNU Library General Public
kono
parents:
diff changeset
103 License along with this library; if not, write to the Free Software
kono
parents:
diff changeset
104 Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
kono
parents:
diff changeset
105 */
kono
parents:
diff changeset
106
kono
parents:
diff changeset
107
kono
parents:
diff changeset
108
kono
parents:
diff changeset
109
kono
parents:
diff changeset
110
kono
parents:
diff changeset
111
kono
parents:
diff changeset
112
kono
parents:
diff changeset
113 //# 1 "../../GctSymbol.h" 1
kono
parents:
diff changeset
114 // -*- C++ -*-
kono
parents:
diff changeset
115
kono
parents:
diff changeset
116
kono
parents:
diff changeset
117
kono
parents:
diff changeset
118 //
kono
parents:
diff changeset
119 // GctSymbol class
kono
parents:
diff changeset
120 //
kono
parents:
diff changeset
121 // Expects to be included by Gct.h
kono
parents:
diff changeset
122 //
kono
parents:
diff changeset
123 // Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU)
kono
parents:
diff changeset
124 //
kono
parents:
diff changeset
125
kono
parents:
diff changeset
126
kono
parents:
diff changeset
127
kono
parents:
diff changeset
128
kono
parents:
diff changeset
129
kono
parents:
diff changeset
130 //#pragma interface
kono
parents:
diff changeset
131
kono
parents:
diff changeset
132
kono
parents:
diff changeset
133
kono
parents:
diff changeset
134
kono
parents:
diff changeset
135
kono
parents:
diff changeset
136 //# 25 "../../GctSymbol.h" 2
kono
parents:
diff changeset
137
kono
parents:
diff changeset
138 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" 1
kono
parents:
diff changeset
139 // This may look like C code, but it is really -*- C++ -*-
kono
parents:
diff changeset
140 /*
kono
parents:
diff changeset
141 Copyright (C) 1988 Free Software Foundation
kono
parents:
diff changeset
142 written by Doug Lea (dl@rocky.oswego.edu)
kono
parents:
diff changeset
143
kono
parents:
diff changeset
144 This file is part of the GNU C++ Library. This library is free
kono
parents:
diff changeset
145 software; you can redistribute it and/or modify it under the terms of
kono
parents:
diff changeset
146 the GNU Library General Public License as published by the Free
kono
parents:
diff changeset
147 Software Foundation; either version 2 of the License, or (at your
kono
parents:
diff changeset
148 option) any later version. This library is distributed in the hope
kono
parents:
diff changeset
149 that it will be useful, but WITHOUT ANY WARRANTY; without even the
kono
parents:
diff changeset
150 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
kono
parents:
diff changeset
151 PURPOSE. See the GNU Library General Public License for more details.
kono
parents:
diff changeset
152 You should have received a copy of the GNU Library General Public
kono
parents:
diff changeset
153 License along with this library; if not, write to the Free Software
kono
parents:
diff changeset
154 Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
kono
parents:
diff changeset
155 */
kono
parents:
diff changeset
156
kono
parents:
diff changeset
157
kono
parents:
diff changeset
158
kono
parents:
diff changeset
159
kono
parents:
diff changeset
160 //#pragma interface
kono
parents:
diff changeset
161
kono
parents:
diff changeset
162
kono
parents:
diff changeset
163
kono
parents:
diff changeset
164 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stream.h" 1
kono
parents:
diff changeset
165
kono
parents:
diff changeset
166
kono
parents:
diff changeset
167
kono
parents:
diff changeset
168 // Compatibility with old library.
kono
parents:
diff changeset
169
kono
parents:
diff changeset
170
kono
parents:
diff changeset
171 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1
kono
parents:
diff changeset
172 // This is part of the iostream library, providing -*- C++ -*- input/output.
kono
parents:
diff changeset
173 // Copyright (C) 1991 Per Bothner.
kono
parents:
diff changeset
174 //
kono
parents:
diff changeset
175 // This library is free software; you can redistribute it and/or
kono
parents:
diff changeset
176 // modify it under the terms of the GNU Library General Public
kono
parents:
diff changeset
177 // License as published by the Free Software Foundation; either
kono
parents:
diff changeset
178 // version 2 of the License, or (at your option) any later version.
kono
parents:
diff changeset
179 //
kono
parents:
diff changeset
180 // This library is distributed in the hope that it will be useful,
kono
parents:
diff changeset
181 // but WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
182 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
kono
parents:
diff changeset
183 // Library General Public License for more details.
kono
parents:
diff changeset
184 //
kono
parents:
diff changeset
185 // You should have received a copy of the GNU Library General Public
kono
parents:
diff changeset
186 // License along with this library; if not, write to the Free
kono
parents:
diff changeset
187 // Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
kono
parents:
diff changeset
188
kono
parents:
diff changeset
189
kono
parents:
diff changeset
190
kono
parents:
diff changeset
191 //#pragma interface
kono
parents:
diff changeset
192
kono
parents:
diff changeset
193
kono
parents:
diff changeset
194
kono
parents:
diff changeset
195
kono
parents:
diff changeset
196 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/streambuf.h" 1
kono
parents:
diff changeset
197 // This is part of the iostream library, providing -*- C++ -*- input/output.
kono
parents:
diff changeset
198 // Copyright (C) 1991 Per Bothner.
kono
parents:
diff changeset
199 //
kono
parents:
diff changeset
200 // This library is free software; you can redistribute it and/or
kono
parents:
diff changeset
201 // modify it under the terms of the GNU Library General Public
kono
parents:
diff changeset
202 // License as published by the Free Software Foundation; either
kono
parents:
diff changeset
203 // version 2 of the License, or (at your option) any later version.
kono
parents:
diff changeset
204 //
kono
parents:
diff changeset
205 // This library is distributed in the hope that it will be useful,
kono
parents:
diff changeset
206 // but WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
207 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
kono
parents:
diff changeset
208 // Library General Public License for more details.
kono
parents:
diff changeset
209 //
kono
parents:
diff changeset
210 // You should have received a copy of the GNU Library General Public
kono
parents:
diff changeset
211 // License along with this library; if not, write to the Free
kono
parents:
diff changeset
212 // Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
kono
parents:
diff changeset
213
kono
parents:
diff changeset
214
kono
parents:
diff changeset
215
kono
parents:
diff changeset
216
kono
parents:
diff changeset
217 //#pragma interface
kono
parents:
diff changeset
218
kono
parents:
diff changeset
219
kono
parents:
diff changeset
220 /* KLUDGES!! */
kono
parents:
diff changeset
221 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 1
kono
parents:
diff changeset
222
kono
parents:
diff changeset
223
kono
parents:
diff changeset
224 extern "C" {
kono
parents:
diff changeset
225
kono
parents:
diff changeset
226
kono
parents:
diff changeset
227
kono
parents:
diff changeset
228 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/mips/lib/gcc/decstatn/cygnus-1.96/include/stddef.h" 1
kono
parents:
diff changeset
229
kono
parents:
diff changeset
230
kono
parents:
diff changeset
231
kono
parents:
diff changeset
232
kono
parents:
diff changeset
233
kono
parents:
diff changeset
234
kono
parents:
diff changeset
235 /* This avoids lossage on Sunos but only if stdtypes.h comes first.
kono
parents:
diff changeset
236 There's no way to win with the other order! Sun lossage. */
kono
parents:
diff changeset
237
kono
parents:
diff changeset
238 /* In case nobody has defined these types, but we aren't running under
kono
parents:
diff changeset
239 GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE__TYPE__, and
kono
parents:
diff changeset
240 __WCHAR_TYPE__ have reasonable values. This can happen if the
kono
parents:
diff changeset
241 parts of GCC is compiled by an older compiler, that actually
kono
parents:
diff changeset
242 include gstddef.h, such as collect2. */
kono
parents:
diff changeset
243
kono
parents:
diff changeset
244 /* Signed type of difference of two pointers. */
kono
parents:
diff changeset
245
kono
parents:
diff changeset
246
kono
parents:
diff changeset
247
kono
parents:
diff changeset
248
kono
parents:
diff changeset
249
kono
parents:
diff changeset
250
kono
parents:
diff changeset
251
kono
parents:
diff changeset
252
kono
parents:
diff changeset
253
kono
parents:
diff changeset
254
kono
parents:
diff changeset
255
kono
parents:
diff changeset
256
kono
parents:
diff changeset
257
kono
parents:
diff changeset
258
kono
parents:
diff changeset
259 typedef long int ptrdiff_t;
kono
parents:
diff changeset
260
kono
parents:
diff changeset
261
kono
parents:
diff changeset
262
kono
parents:
diff changeset
263
kono
parents:
diff changeset
264
kono
parents:
diff changeset
265
kono
parents:
diff changeset
266 /* Unsigned type of `sizeof' something. */
kono
parents:
diff changeset
267
kono
parents:
diff changeset
268
kono
parents:
diff changeset
269
kono
parents:
diff changeset
270
kono
parents:
diff changeset
271
kono
parents:
diff changeset
272
kono
parents:
diff changeset
273
kono
parents:
diff changeset
274
kono
parents:
diff changeset
275
kono
parents:
diff changeset
276
kono
parents:
diff changeset
277
kono
parents:
diff changeset
278
kono
parents:
diff changeset
279
kono
parents:
diff changeset
280
kono
parents:
diff changeset
281 typedef unsigned int size_t;
kono
parents:
diff changeset
282
kono
parents:
diff changeset
283
kono
parents:
diff changeset
284
kono
parents:
diff changeset
285
kono
parents:
diff changeset
286
kono
parents:
diff changeset
287
kono
parents:
diff changeset
288 /* Data type for wide chars. */
kono
parents:
diff changeset
289
kono
parents:
diff changeset
290
kono
parents:
diff changeset
291
kono
parents:
diff changeset
292
kono
parents:
diff changeset
293
kono
parents:
diff changeset
294
kono
parents:
diff changeset
295
kono
parents:
diff changeset
296
kono
parents:
diff changeset
297
kono
parents:
diff changeset
298
kono
parents:
diff changeset
299
kono
parents:
diff changeset
300
kono
parents:
diff changeset
301
kono
parents:
diff changeset
302
kono
parents:
diff changeset
303
kono
parents:
diff changeset
304
kono
parents:
diff changeset
305
kono
parents:
diff changeset
306
kono
parents:
diff changeset
307
kono
parents:
diff changeset
308
kono
parents:
diff changeset
309
kono
parents:
diff changeset
310
kono
parents:
diff changeset
311 /* A null pointer constant. */
kono
parents:
diff changeset
312
kono
parents:
diff changeset
313
kono
parents:
diff changeset
314
kono
parents:
diff changeset
315
kono
parents:
diff changeset
316 /* Offset of member MEMBER in a struct of type TYPE. */
kono
parents:
diff changeset
317
kono
parents:
diff changeset
318
kono
parents:
diff changeset
319
kono
parents:
diff changeset
320
kono
parents:
diff changeset
321
kono
parents:
diff changeset
322 //# 7 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 2
kono
parents:
diff changeset
323
kono
parents:
diff changeset
324
kono
parents:
diff changeset
325
kono
parents:
diff changeset
326
kono
parents:
diff changeset
327 }
kono
parents:
diff changeset
328
kono
parents:
diff changeset
329 //# 25 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/streambuf.h" 2
kono
parents:
diff changeset
330
kono
parents:
diff changeset
331
kono
parents:
diff changeset
332
kono
parents:
diff changeset
333
kono
parents:
diff changeset
334
kono
parents:
diff changeset
335
kono
parents:
diff changeset
336
kono
parents:
diff changeset
337
kono
parents:
diff changeset
338
kono
parents:
diff changeset
339
kono
parents:
diff changeset
340
kono
parents:
diff changeset
341
kono
parents:
diff changeset
342
kono
parents:
diff changeset
343
kono
parents:
diff changeset
344
kono
parents:
diff changeset
345
kono
parents:
diff changeset
346 class ostream; class streambuf;
kono
parents:
diff changeset
347
kono
parents:
diff changeset
348 typedef long streamoff, streampos;
kono
parents:
diff changeset
349
kono
parents:
diff changeset
350 struct _ios_fields { // The data members of an ios.
kono
parents:
diff changeset
351 streambuf *_strbuf;
kono
parents:
diff changeset
352 ostream* _tie;
kono
parents:
diff changeset
353 long _width;
kono
parents:
diff changeset
354 unsigned long _flags;
kono
parents:
diff changeset
355 char _fill;
kono
parents:
diff changeset
356 unsigned char _state;
kono
parents:
diff changeset
357 unsigned short _precision;
kono
parents:
diff changeset
358 };
kono
parents:
diff changeset
359
kono
parents:
diff changeset
360
kono
parents:
diff changeset
361 enum state_value { _good = 0, _eof = 1, _fail = 2, _bad = 4 };
kono
parents:
diff changeset
362
kono
parents:
diff changeset
363
kono
parents:
diff changeset
364 class ios : public _ios_fields {
kono
parents:
diff changeset
365 public:
kono
parents:
diff changeset
366 enum io_state { goodbit=0, eofbit=1, failbit=2, badbit=4 };
kono
parents:
diff changeset
367 enum open_mode {
kono
parents:
diff changeset
368 in=1,
kono
parents:
diff changeset
369 out=2,
kono
parents:
diff changeset
370 ate=4,
kono
parents:
diff changeset
371 app=8,
kono
parents:
diff changeset
372 trunc=16,
kono
parents:
diff changeset
373 nocreate=32,
kono
parents:
diff changeset
374 noreplace=64 };
kono
parents:
diff changeset
375 enum seek_dir { beg, cur, end};
kono
parents:
diff changeset
376 enum { skipws=01, left=02, right=04, internal=010,
kono
parents:
diff changeset
377 dec=020, oct=040, hex=0100,
kono
parents:
diff changeset
378 showbase=0200, showpoint=0400, uppercase=01000, showpos=02000,
kono
parents:
diff changeset
379 scientific=04000, fixed=0100000, unitbuf=020000, stdio=040000,
kono
parents:
diff changeset
380 dont_close=0x80000000 //Don't close streambuf when destroying stream
kono
parents:
diff changeset
381 };
kono
parents:
diff changeset
382
kono
parents:
diff changeset
383 ostream* tie() { return _tie; }
kono
parents:
diff changeset
384 ostream* tie(ostream* val) { ostream* save=_tie; _tie=val; return save; }
kono
parents:
diff changeset
385
kono
parents:
diff changeset
386 // Methods to change the format state.
kono
parents:
diff changeset
387 char fill() { return _fill; }
kono
parents:
diff changeset
388 char fill(char newf) { char oldf = _fill; _fill = newf; return oldf; }
kono
parents:
diff changeset
389 unsigned long flags() { return _flags; }
kono
parents:
diff changeset
390 unsigned long flags(unsigned long new_val) {
kono
parents:
diff changeset
391 unsigned long old_val = _flags; _flags = new_val; return old_val; }
kono
parents:
diff changeset
392 unsigned short precision() { return _precision; }
kono
parents:
diff changeset
393 unsigned short precision(int newp) {
kono
parents:
diff changeset
394 unsigned short oldp = _precision; _precision = (unsigned short)newp;
kono
parents:
diff changeset
395 return oldp; }
kono
parents:
diff changeset
396 unsigned long setf(unsigned long val) {
kono
parents:
diff changeset
397 unsigned long oldbits = _flags;
kono
parents:
diff changeset
398 _flags |= val; return oldbits; }
kono
parents:
diff changeset
399 unsigned long setf(unsigned long val, unsigned long mask) {
kono
parents:
diff changeset
400 unsigned long oldbits = _flags;
kono
parents:
diff changeset
401 _flags = (_flags & ~mask) | (val & mask); return oldbits; }
kono
parents:
diff changeset
402 unsigned long unsetf(unsigned long mask) {
kono
parents:
diff changeset
403 unsigned long oldbits = _flags & mask;
kono
parents:
diff changeset
404 _flags &= ~mask; return oldbits; }
kono
parents:
diff changeset
405 long width() { return _width; }
kono
parents:
diff changeset
406 long width(long val) { long save = _width; _width = val; return save; }
kono
parents:
diff changeset
407
kono
parents:
diff changeset
408 static const unsigned long basefield;
kono
parents:
diff changeset
409 static const unsigned long adjustfield;
kono
parents:
diff changeset
410 static const unsigned long floatfield;
kono
parents:
diff changeset
411
kono
parents:
diff changeset
412 streambuf* rdbuf() { return _strbuf; }
kono
parents:
diff changeset
413 void clear(int state = 0) { _state = state; }
kono
parents:
diff changeset
414 int good() { return _state == 0; }
kono
parents:
diff changeset
415 int eof() { return _state & ios::eofbit; }
kono
parents:
diff changeset
416 int fail() { return _state & (ios::badbit|ios::failbit); }
kono
parents:
diff changeset
417 int bad() { return _state & ios::badbit; }
kono
parents:
diff changeset
418 int rdstate() { return _state; }
kono
parents:
diff changeset
419 void set(int flag) { _state |= flag; }
kono
parents:
diff changeset
420 operator void*() { return fail() ? (void*)0 : (void*)this; }
kono
parents:
diff changeset
421 int operator!() { return fail(); }
kono
parents:
diff changeset
422
kono
parents:
diff changeset
423
kono
parents:
diff changeset
424 void unset(state_value flag) { _state &= ~flag; }
kono
parents:
diff changeset
425 void close();
kono
parents:
diff changeset
426 int is_open();
kono
parents:
diff changeset
427 int readable();
kono
parents:
diff changeset
428 int writable();
kono
parents:
diff changeset
429
kono
parents:
diff changeset
430
kono
parents:
diff changeset
431 protected:
kono
parents:
diff changeset
432 ios(streambuf*sb) { _strbuf=sb; _state=0; _width=0; _fill=' ';
kono
parents:
diff changeset
433 _flags=ios::skipws; _precision=6; }
kono
parents:
diff changeset
434 };
kono
parents:
diff changeset
435
kono
parents:
diff changeset
436
kono
parents:
diff changeset
437
kono
parents:
diff changeset
438
kono
parents:
diff changeset
439 typedef ios::seek_dir _seek_dir;
kono
parents:
diff changeset
440
kono
parents:
diff changeset
441
kono
parents:
diff changeset
442 // Magic numbers and bits for the _flags field.
kono
parents:
diff changeset
443 // The magic numbers use the high-order bits of _flags;
kono
parents:
diff changeset
444 // the remaining bits are abailable for variable flags.
kono
parents:
diff changeset
445 // Note: The magic numbers must all be negative if stdio
kono
parents:
diff changeset
446 // emulation is desired.
kono
parents:
diff changeset
447
kono
parents:
diff changeset
448
kono
parents:
diff changeset
449
kono
parents:
diff changeset
450
kono
parents:
diff changeset
451
kono
parents:
diff changeset
452
kono
parents:
diff changeset
453
kono
parents:
diff changeset
454
kono
parents:
diff changeset
455
kono
parents:
diff changeset
456
kono
parents:
diff changeset
457
kono
parents:
diff changeset
458
kono
parents:
diff changeset
459
kono
parents:
diff changeset
460
kono
parents:
diff changeset
461
kono
parents:
diff changeset
462 struct __streambuf {
kono
parents:
diff changeset
463 // NOTE: If this is changed, also change __FILE in stdio/stdio.h!
kono
parents:
diff changeset
464 int _flags; /* High-order word is _IO_MAGIC; rest is flags. */
kono
parents:
diff changeset
465 char* _gptr; /* Current get pointer */
kono
parents:
diff changeset
466 char* _egptr; /* End of get area. */
kono
parents:
diff changeset
467 char* _eback; /* Start of putback+get area. */
kono
parents:
diff changeset
468 char* _pbase; /* Start of put area. */
kono
parents:
diff changeset
469 char* _pptr; /* Current put pointer. */
kono
parents:
diff changeset
470 char* _epptr; /* End of put area. */
kono
parents:
diff changeset
471 char* _base; /* Start of reserve area. */
kono
parents:
diff changeset
472 char* _ebuf; /* End of reserve area. */
kono
parents:
diff changeset
473 struct streambuf *_chain;
kono
parents:
diff changeset
474 };
kono
parents:
diff changeset
475
kono
parents:
diff changeset
476 struct streambuf : private __streambuf {
kono
parents:
diff changeset
477 friend class ios;
kono
parents:
diff changeset
478 friend class istream;
kono
parents:
diff changeset
479 friend class ostream;
kono
parents:
diff changeset
480 protected:
kono
parents:
diff changeset
481 static streambuf* _list_all; /* List of open streambufs. */
kono
parents:
diff changeset
482 streambuf*& xchain() { return _chain; }
kono
parents:
diff changeset
483 void _un_link();
kono
parents:
diff changeset
484 void _link_in();
kono
parents:
diff changeset
485 char* gptr() const { return _gptr; }
kono
parents:
diff changeset
486 char* pptr() const { return _pptr; }
kono
parents:
diff changeset
487 char* egptr() const { return _egptr; }
kono
parents:
diff changeset
488 char* epptr() const { return _epptr; }
kono
parents:
diff changeset
489 char* pbase() const { return _pbase; }
kono
parents:
diff changeset
490 char* eback() const { return _eback; }
kono
parents:
diff changeset
491 char* ebuf() const { return _ebuf; }
kono
parents:
diff changeset
492 char* base() const { return _base; }
kono
parents:
diff changeset
493 void xput_char(char c) { *_pptr++ = c; }
kono
parents:
diff changeset
494 int xflags() { return _flags; }
kono
parents:
diff changeset
495 int xflags(int f) { int fl = _flags; _flags = f; return fl; }
kono
parents:
diff changeset
496 void xsetflags(int f) { _flags |= f; }
kono
parents:
diff changeset
497 void gbump(int n) { _gptr += n; }
kono
parents:
diff changeset
498 void pbump(int n) { _pptr += n; }
kono
parents:
diff changeset
499 void setb(char* b, char* eb, int a=0);
kono
parents:
diff changeset
500 void setp(char* p, char* ep) { _pbase=_pptr=p; _epptr=ep; }
kono
parents:
diff changeset
501 void setg(char* eb, char* g, char *eg) { _eback=eb; _gptr=g; _egptr=eg; }
kono
parents:
diff changeset
502 public:
kono
parents:
diff changeset
503 static int flush_all();
kono
parents:
diff changeset
504 static void flush_all_linebuffered(); // Flush all line buffered files.
kono
parents:
diff changeset
505 virtual int underflow(); // Leave public for now
kono
parents:
diff changeset
506 virtual int overflow(int c = (-1) ); // Leave public for now
kono
parents:
diff changeset
507 virtual int doallocate();
kono
parents:
diff changeset
508 virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
kono
parents:
diff changeset
509 virtual streampos seekpos(streampos pos, int mode = ios::in|ios::out);
kono
parents:
diff changeset
510 int sputbackc(char c);
kono
parents:
diff changeset
511 int sungetc();
kono
parents:
diff changeset
512 streambuf();
kono
parents:
diff changeset
513 virtual ~streambuf();
kono
parents:
diff changeset
514 int unbuffered() { return _flags & 2 ? 1 : 0; }
kono
parents:
diff changeset
515 int linebuffered() { return _flags & 0x4000 ? 1 : 0; }
kono
parents:
diff changeset
516 void unbuffered(int i)
kono
parents:
diff changeset
517 { if (i) _flags |= 2 ; else _flags &= ~2 ; }
kono
parents:
diff changeset
518 void linebuffered(int i)
kono
parents:
diff changeset
519 { if (i) _flags |= 0x4000 ; else _flags &= ~0x4000 ; }
kono
parents:
diff changeset
520 int allocate() {
kono
parents:
diff changeset
521 if (base() || unbuffered()) return 0;
kono
parents:
diff changeset
522 else return doallocate(); }
kono
parents:
diff changeset
523 virtual int sync();
kono
parents:
diff changeset
524 virtual int pbackfail(int c);
kono
parents:
diff changeset
525 virtual int ungetfail();
kono
parents:
diff changeset
526 virtual streambuf* setbuf(char* p, int len);
kono
parents:
diff changeset
527 int in_avail() { return _egptr - _gptr; }
kono
parents:
diff changeset
528 int out_waiting() { return _pptr - _pbase; }
kono
parents:
diff changeset
529 virtual int sputn(const char* s, int n);
kono
parents:
diff changeset
530 virtual int sgetn(char* s, int n);
kono
parents:
diff changeset
531 long sgetline(char* buf, size_t n, char delim, int putback_delim);
kono
parents:
diff changeset
532 int sbumpc() {
kono
parents:
diff changeset
533 if (_gptr >= _egptr && underflow() == (-1) ) return (-1) ;
kono
parents:
diff changeset
534 else return *(unsigned char*)_gptr++; }
kono
parents:
diff changeset
535 int sgetc() {
kono
parents:
diff changeset
536 if (_gptr >= _egptr && underflow() == (-1) ) return (-1) ;
kono
parents:
diff changeset
537 else return *(unsigned char*)_gptr; }
kono
parents:
diff changeset
538 int snextc() {
kono
parents:
diff changeset
539 if (++_gptr >= _egptr && underflow() == (-1) ) return (-1) ;
kono
parents:
diff changeset
540 else return *(unsigned char*)_gptr; }
kono
parents:
diff changeset
541 int sputc(int c) {
kono
parents:
diff changeset
542 if (_pptr >= _epptr) return overflow(c);
kono
parents:
diff changeset
543 return *_pptr++ = c, (unsigned char)c; }
kono
parents:
diff changeset
544 int vscan(char const *fmt0, char* ap);
kono
parents:
diff changeset
545 int vform(char const *fmt0, char* ap);
kono
parents:
diff changeset
546 };
kono
parents:
diff changeset
547
kono
parents:
diff changeset
548 struct __file_fields {
kono
parents:
diff changeset
549 char _fake;
kono
parents:
diff changeset
550 char _shortbuf[1];
kono
parents:
diff changeset
551 short _fileno;
kono
parents:
diff changeset
552 int _blksize;
kono
parents:
diff changeset
553 char* _save_gptr;
kono
parents:
diff changeset
554 char* _save_egptr;
kono
parents:
diff changeset
555 long _offset;
kono
parents:
diff changeset
556 };
kono
parents:
diff changeset
557
kono
parents:
diff changeset
558 class filebuf : public streambuf {
kono
parents:
diff changeset
559 struct __file_fields _fb;
kono
parents:
diff changeset
560 void init();
kono
parents:
diff changeset
561 public:
kono
parents:
diff changeset
562 filebuf();
kono
parents:
diff changeset
563 filebuf(int fd);
kono
parents:
diff changeset
564 filebuf(int fd, char* p, int len);
kono
parents:
diff changeset
565 ~filebuf();
kono
parents:
diff changeset
566 filebuf* attach(int fd);
kono
parents:
diff changeset
567 filebuf* open(const char *filename, const char *mode);
kono
parents:
diff changeset
568 filebuf* open(const char *filename, int mode, int prot = 0664);
kono
parents:
diff changeset
569 virtual int underflow();
kono
parents:
diff changeset
570 virtual int overflow(int c = (-1) );
kono
parents:
diff changeset
571 int is_open() { return _fb._fileno >= 0; }
kono
parents:
diff changeset
572 int fd() { return is_open() ? _fb._fileno : (-1) ; }
kono
parents:
diff changeset
573 filebuf* close();
kono
parents:
diff changeset
574 virtual int doallocate();
kono
parents:
diff changeset
575 virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
kono
parents:
diff changeset
576 int sputn(const char* s, int n);
kono
parents:
diff changeset
577 int sgetn(char* s, int n);
kono
parents:
diff changeset
578 protected: // See documentation in filebuf.C.
kono
parents:
diff changeset
579 virtual int pbackfail(int c);
kono
parents:
diff changeset
580 virtual int sync();
kono
parents:
diff changeset
581 int is_reading() { return eback() != egptr(); }
kono
parents:
diff changeset
582 char* cur_ptr() { return is_reading() ? gptr() : pptr(); }
kono
parents:
diff changeset
583 /* System's idea of pointer */
kono
parents:
diff changeset
584 char* file_ptr() { return _fb._save_gptr ? _fb._save_egptr : egptr(); }
kono
parents:
diff changeset
585 int do_flush();
kono
parents:
diff changeset
586 // Low-level operations (Usually invoke system calls.)
kono
parents:
diff changeset
587 virtual int sys_read(char* buf, size_t size);
kono
parents:
diff changeset
588 virtual long sys_seek(long , _seek_dir);
kono
parents:
diff changeset
589 virtual long sys_write(const void*, long);
kono
parents:
diff changeset
590 virtual int sys_stat(void*); // Actually, a (struct stat*)
kono
parents:
diff changeset
591 virtual int sys_close();
kono
parents:
diff changeset
592 };
kono
parents:
diff changeset
593
kono
parents:
diff changeset
594
kono
parents:
diff changeset
595 inline int ios::readable() { return rdbuf()->_flags & 4 ; }
kono
parents:
diff changeset
596 inline int ios::writable() { return rdbuf()->_flags & 8 ; }
kono
parents:
diff changeset
597 inline int ios::is_open() {return rdbuf()->_flags & 4 +8 ;}
kono
parents:
diff changeset
598
kono
parents:
diff changeset
599
kono
parents:
diff changeset
600
kono
parents:
diff changeset
601
kono
parents:
diff changeset
602 //# 25 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 2
kono
parents:
diff changeset
603
kono
parents:
diff changeset
604
kono
parents:
diff changeset
605 class istream; class ostream;
kono
parents:
diff changeset
606 typedef istream& (*__imanip)(istream&);
kono
parents:
diff changeset
607 typedef ostream& (*__omanip)(ostream&);
kono
parents:
diff changeset
608
kono
parents:
diff changeset
609 extern istream& ws(istream& ins);
kono
parents:
diff changeset
610 extern ostream& flush(ostream& outs);
kono
parents:
diff changeset
611 extern ostream& endl(ostream& outs);
kono
parents:
diff changeset
612 extern ostream& ends(ostream& outs);
kono
parents:
diff changeset
613
kono
parents:
diff changeset
614 class ostream : public ios
kono
parents:
diff changeset
615 {
kono
parents:
diff changeset
616 void do_osfx();
kono
parents:
diff changeset
617 public:
kono
parents:
diff changeset
618 ostream();
kono
parents:
diff changeset
619 ostream(streambuf* sb, ostream* tied=(__null) );
kono
parents:
diff changeset
620 ~ostream();
kono
parents:
diff changeset
621
kono
parents:
diff changeset
622 int opfx() { if (!good()) return 0; if (_tie) _tie->flush(); return 1; }
kono
parents:
diff changeset
623 void osfx() { if (flags() & (ios::unitbuf|ios::stdio))
kono
parents:
diff changeset
624 do_osfx(); }
kono
parents:
diff changeset
625 streambuf* ostreambuf() const { return _strbuf; }
kono
parents:
diff changeset
626 ostream& flush();
kono
parents:
diff changeset
627 ostream& put(char c);
kono
parents:
diff changeset
628 ostream& write(const char *s, int n);
kono
parents:
diff changeset
629 ostream& write(const unsigned char *s, int n) { return write((char*)s, n);}
kono
parents:
diff changeset
630 ostream& write(const void *s, int n) { return write((char*)s, n);}
kono
parents:
diff changeset
631 ostream& seekp(streampos);
kono
parents:
diff changeset
632 ostream& seekp(streamoff, _seek_dir);
kono
parents:
diff changeset
633 streampos tellp();
kono
parents:
diff changeset
634 ostream& form(const char *format ...);
kono
parents:
diff changeset
635 ostream& vform(const char *format, char* args);
kono
parents:
diff changeset
636 };
kono
parents:
diff changeset
637
kono
parents:
diff changeset
638 ostream& operator<<(ostream&, char c);
kono
parents:
diff changeset
639 ostream& operator<<(ostream& os, unsigned char c) { return os << (char)c; }
kono
parents:
diff changeset
640 //ostream& operator<<(ostream &os, signed char c) { return os << (char)c; }
kono
parents:
diff changeset
641 extern ostream& operator<<(ostream&, const char *s);
kono
parents:
diff changeset
642 inline ostream& operator<<(ostream& os, const unsigned char *s)
kono
parents:
diff changeset
643 { return os << (const char*)s; }
kono
parents:
diff changeset
644 //inline ostream& operator<<(ostream& os, const signed char *s)
kono
parents:
diff changeset
645 //{ return os << (const char*)s; }
kono
parents:
diff changeset
646 ostream& operator<<(ostream&, void *p);
kono
parents:
diff changeset
647 ostream& operator<<(ostream&, int n);
kono
parents:
diff changeset
648 ostream& operator<<(ostream&, long n);
kono
parents:
diff changeset
649 ostream& operator<<(ostream&, unsigned int n);
kono
parents:
diff changeset
650 ostream& operator<<(ostream&, unsigned long n);
kono
parents:
diff changeset
651 ostream& operator<<(ostream& os, short n) {return os << (int)n;}
kono
parents:
diff changeset
652 ostream& operator<<(ostream& os, unsigned short n)
kono
parents:
diff changeset
653 {return os << (unsigned int)n;}
kono
parents:
diff changeset
654 ostream& operator<<(ostream&, float n);
kono
parents:
diff changeset
655 ostream& operator<<(ostream&, double n);
kono
parents:
diff changeset
656 ostream& operator<<(ostream& os, __omanip func) { return (*func)(os); }
kono
parents:
diff changeset
657 ostream& operator<<(ostream&, streambuf*);
kono
parents:
diff changeset
658
kono
parents:
diff changeset
659 class istream : public ios
kono
parents:
diff changeset
660 {
kono
parents:
diff changeset
661 size_t _gcount;
kono
parents:
diff changeset
662 public:
kono
parents:
diff changeset
663 istream();
kono
parents:
diff changeset
664 istream(streambuf* sb, ostream*tied=(__null) );
kono
parents:
diff changeset
665 ~istream();
kono
parents:
diff changeset
666 streambuf* istreambuf() const { return _strbuf; }
kono
parents:
diff changeset
667 istream& get(char& c);
kono
parents:
diff changeset
668 istream& get(unsigned char& c);
kono
parents:
diff changeset
669 istream& read(char *ptr, int n);
kono
parents:
diff changeset
670 istream& read(unsigned char *ptr, int n) { return read((char*)ptr, n); }
kono
parents:
diff changeset
671 istream& read(void *ptr, int n) { return read((char*)ptr, n); }
kono
parents:
diff changeset
672 int get() { return _strbuf->sbumpc(); }
kono
parents:
diff changeset
673 istream& getline(char* ptr, int len, char delim = '\n');
kono
parents:
diff changeset
674 istream& get(char* ptr, int len, char delim = '\n');
kono
parents:
diff changeset
675 istream& gets(char **s, char delim = '\n');
kono
parents:
diff changeset
676 int ipfx(int need) {
kono
parents:
diff changeset
677 if (!good()) { set(ios::failbit); return 0; }
kono
parents:
diff changeset
678 if (_tie && (need == 0 || rdbuf()->in_avail())) ; //??? THIS LINE IS QUESTIONABLE */
kono
parents:
diff changeset
679 if (!need && (flags() & ios::skipws) && !ws(*this)) return 0;
kono
parents:
diff changeset
680 return 1;
kono
parents:
diff changeset
681 }
kono
parents:
diff changeset
682 int ipfx0() { // Optimized version of ipfx(0).
kono
parents:
diff changeset
683 if (!good()) { set(ios::failbit); return 0; }
kono
parents:
diff changeset
684 if (_tie) _tie->flush();
kono
parents:
diff changeset
685 if ((flags() & ios::skipws) && !ws(*this)) return 0;
kono
parents:
diff changeset
686 return 1;
kono
parents:
diff changeset
687 }
kono
parents:
diff changeset
688 int ipfx1() { // Optimized version of ipfx(1).
kono
parents:
diff changeset
689 if (!good()) { set(ios::failbit); return 0; }
kono
parents:
diff changeset
690 if (_tie && rdbuf()->in_avail() == 0) _tie->flush();
kono
parents:
diff changeset
691 return 1;
kono
parents:
diff changeset
692 }
kono
parents:
diff changeset
693 size_t gcount() { return _gcount; }
kono
parents:
diff changeset
694 istream& seekg(streampos);
kono
parents:
diff changeset
695 istream& seekg(streamoff, _seek_dir);
kono
parents:
diff changeset
696 streampos tellg();
kono
parents:
diff changeset
697 istream& putback(char ch) {
kono
parents:
diff changeset
698 if (good() && _strbuf->sputbackc(ch) == (-1) ) clear(ios::badbit);
kono
parents:
diff changeset
699 return *this;}
kono
parents:
diff changeset
700 istream& unget() {
kono
parents:
diff changeset
701 if (good() && _strbuf->sungetc() == (-1) ) clear(ios::badbit);
kono
parents:
diff changeset
702 return *this;}
kono
parents:
diff changeset
703
kono
parents:
diff changeset
704 istream& unget(char ch) { return putback(ch); }
kono
parents:
diff changeset
705 int skip(int i);
kono
parents:
diff changeset
706
kono
parents:
diff changeset
707 };
kono
parents:
diff changeset
708
kono
parents:
diff changeset
709 istream& operator>>(istream&, char*);
kono
parents:
diff changeset
710 istream& operator>>(istream& is, unsigned char* p) { return is >> (char*)p; }
kono
parents:
diff changeset
711 //istream& operator>>(istream& is, signed char* p) { return is >> (char*)p; }
kono
parents:
diff changeset
712 istream& operator>>(istream&, char& c);
kono
parents:
diff changeset
713 istream& operator>>(istream&, unsigned char& c);
kono
parents:
diff changeset
714 //istream& operator>>(istream&, signed char& c);
kono
parents:
diff changeset
715 istream& operator>>(istream&, int&);
kono
parents:
diff changeset
716 istream& operator>>(istream&, long&);
kono
parents:
diff changeset
717 istream& operator>>(istream&, short&);
kono
parents:
diff changeset
718 istream& operator>>(istream&, unsigned int&);
kono
parents:
diff changeset
719 istream& operator>>(istream&, unsigned long&);
kono
parents:
diff changeset
720 istream& operator>>(istream&, unsigned short&);
kono
parents:
diff changeset
721 istream& operator>>(istream&, float&);
kono
parents:
diff changeset
722 istream& operator>>(istream&, double&);
kono
parents:
diff changeset
723 istream& operator>>(istream& is, __imanip func) { return (*func)(is); }
kono
parents:
diff changeset
724
kono
parents:
diff changeset
725 class iostream : public ios {
kono
parents:
diff changeset
726 size_t _gcount;
kono
parents:
diff changeset
727 public:
kono
parents:
diff changeset
728 iostream();
kono
parents:
diff changeset
729 operator istream&() { return *(istream*)this; }
kono
parents:
diff changeset
730 operator ostream&() { return *(ostream*)this; }
kono
parents:
diff changeset
731 ~iostream();
kono
parents:
diff changeset
732 // NOTE: These duplicate istream methods.
kono
parents:
diff changeset
733 istream& get(char& c) { return ((istream*)this)->get(c); }
kono
parents:
diff changeset
734 istream& get(unsigned char& c) { return ((istream*)this)->get(c); }
kono
parents:
diff changeset
735 istream& read(char *ptr, int n) { return ((istream*)this)->read(ptr, n); }
kono
parents:
diff changeset
736 istream& read(unsigned char *ptr, int n)
kono
parents:
diff changeset
737 { return ((istream*)this)->read((char*)ptr, n); }
kono
parents:
diff changeset
738 istream& read(void *ptr, int n)
kono
parents:
diff changeset
739 { return ((istream*)this)->read((char*)ptr, n); }
kono
parents:
diff changeset
740 int get() { return _strbuf->sbumpc(); }
kono
parents:
diff changeset
741 istream& getline(char* ptr, int len, char delim = '\n')
kono
parents:
diff changeset
742 { return ((istream*)this)->getline(ptr, len, delim); }
kono
parents:
diff changeset
743 istream& get(char* ptr, int len, char delim = '\n')
kono
parents:
diff changeset
744 { return ((istream*)this)->get(ptr, len, delim); }
kono
parents:
diff changeset
745 istream& gets(char **s, char delim = '\n')
kono
parents:
diff changeset
746 { return ((istream*)this)->gets(s, delim); }
kono
parents:
diff changeset
747 int ipfx(int need) { return ((istream*)this)->ipfx(need); }
kono
parents:
diff changeset
748 int ipfx0() { return ((istream*)this)->ipfx0(); }
kono
parents:
diff changeset
749 int ipfx1() { return ((istream*)this)->ipfx1(); }
kono
parents:
diff changeset
750 size_t gcount() { return _gcount; }
kono
parents:
diff changeset
751 istream& putback(char ch) { return ((istream*)this)->putback(ch); }
kono
parents:
diff changeset
752 istream& unget() { return ((istream*)this)->unget(); }
kono
parents:
diff changeset
753 istream& seekg(streampos pos) { return ((istream*)this)->seekg(pos); }
kono
parents:
diff changeset
754 istream& seekg(streamoff off, _seek_dir dir)
kono
parents:
diff changeset
755 { return ((istream*)this)->seekg(off, dir); }
kono
parents:
diff changeset
756 streampos tellg() { return ((istream*)this)->tellg(); }
kono
parents:
diff changeset
757
kono
parents:
diff changeset
758 istream& unget(char ch) { return putback(ch); }
kono
parents:
diff changeset
759
kono
parents:
diff changeset
760
kono
parents:
diff changeset
761 // NOTE: These duplicate ostream methods.
kono
parents:
diff changeset
762 int opfx() { return ((ostream*)this)->opfx(); }
kono
parents:
diff changeset
763 void osfx() { ((ostream*)this)->osfx(); }
kono
parents:
diff changeset
764 ostream& flush() { return ((ostream*)this)->flush(); }
kono
parents:
diff changeset
765 ostream& put(char c) { return ((ostream*)this)->put(c); }
kono
parents:
diff changeset
766 ostream& write(const char *s, int n)
kono
parents:
diff changeset
767 { return ((ostream*)this)->write(s, n); }
kono
parents:
diff changeset
768 ostream& write(const unsigned char *s, int n)
kono
parents:
diff changeset
769 { return ((ostream*)this)->write((char*)s, n); }
kono
parents:
diff changeset
770 ostream& write(const void *s, int n)
kono
parents:
diff changeset
771 { return ((ostream*)this)->write((char*)s, n); }
kono
parents:
diff changeset
772 ostream& form(const char *format ...);
kono
parents:
diff changeset
773 ostream& vform(const char *format, char* args)
kono
parents:
diff changeset
774 { return ((ostream*)this)->vform(format, args); }
kono
parents:
diff changeset
775 ostream& seekp(streampos pos) { return ((ostream*)this)->seekp(pos); }
kono
parents:
diff changeset
776 ostream& seekp(streamoff off, _seek_dir dir)
kono
parents:
diff changeset
777 { return ((ostream*)this)->seekp(off, dir); }
kono
parents:
diff changeset
778 streampos tellp() { return ((ostream*)this)->tellp(); }
kono
parents:
diff changeset
779 };
kono
parents:
diff changeset
780
kono
parents:
diff changeset
781 extern istream cin;
kono
parents:
diff changeset
782 extern ostream cout, cerr, clog; // clog->rdbuf() == cerr->rdbuf()
kono
parents:
diff changeset
783
kono
parents:
diff changeset
784 inline ostream& ostream::put(char c) { _strbuf->sputc(c); return *this; }
kono
parents:
diff changeset
785
kono
parents:
diff changeset
786 struct Iostream_init { } ; // Compatibility hack for AT&T libraray.
kono
parents:
diff changeset
787
kono
parents:
diff changeset
788
kono
parents:
diff changeset
789 //# 7 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stream.h" 2
kono
parents:
diff changeset
790
kono
parents:
diff changeset
791
kono
parents:
diff changeset
792 extern char* form(char*, ...);
kono
parents:
diff changeset
793
kono
parents:
diff changeset
794 extern char* dec(long, int=0);
kono
parents:
diff changeset
795 extern char* dec(int, int=0);
kono
parents:
diff changeset
796 extern char* dec(unsigned long, int=0);
kono
parents:
diff changeset
797 extern char* dec(unsigned int, int=0);
kono
parents:
diff changeset
798
kono
parents:
diff changeset
799 extern char* hex(long, int=0);
kono
parents:
diff changeset
800 extern char* hex(int, int=0);
kono
parents:
diff changeset
801 extern char* hex(unsigned long, int=0);
kono
parents:
diff changeset
802 extern char* hex(unsigned int, int=0);
kono
parents:
diff changeset
803
kono
parents:
diff changeset
804 extern char* oct(long, int=0);
kono
parents:
diff changeset
805 extern char* oct(int, int=0);
kono
parents:
diff changeset
806 extern char* oct(unsigned long, int=0);
kono
parents:
diff changeset
807 extern char* oct(unsigned int, int=0);
kono
parents:
diff changeset
808
kono
parents:
diff changeset
809 inline istream& WS(istream& str) { return ws(str); }
kono
parents:
diff changeset
810
kono
parents:
diff changeset
811
kono
parents:
diff changeset
812 //# 26 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" 2
kono
parents:
diff changeset
813
kono
parents:
diff changeset
814 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/Regex.h" 1
kono
parents:
diff changeset
815 // This may look like C code, but it is really -*- C++ -*-
kono
parents:
diff changeset
816 /*
kono
parents:
diff changeset
817 Copyright (C) 1988 Free Software Foundation
kono
parents:
diff changeset
818 written by Doug Lea (dl@rocky.oswego.edu)
kono
parents:
diff changeset
819
kono
parents:
diff changeset
820 This file is part of the GNU C++ Library. This library is free
kono
parents:
diff changeset
821 software; you can redistribute it and/or modify it under the terms of
kono
parents:
diff changeset
822 the GNU Library General Public License as published by the Free
kono
parents:
diff changeset
823 Software Foundation; either version 2 of the License, or (at your
kono
parents:
diff changeset
824 option) any later version. This library is distributed in the hope
kono
parents:
diff changeset
825 that it will be useful, but WITHOUT ANY WARRANTY; without even the
kono
parents:
diff changeset
826 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
kono
parents:
diff changeset
827 PURPOSE. See the GNU Library General Public License for more details.
kono
parents:
diff changeset
828 You should have received a copy of the GNU Library General Public
kono
parents:
diff changeset
829 License along with this library; if not, write to the Free Software
kono
parents:
diff changeset
830 Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
kono
parents:
diff changeset
831 */
kono
parents:
diff changeset
832
kono
parents:
diff changeset
833
kono
parents:
diff changeset
834
kono
parents:
diff changeset
835
kono
parents:
diff changeset
836 //#pragma interface
kono
parents:
diff changeset
837
kono
parents:
diff changeset
838
kono
parents:
diff changeset
839
kono
parents:
diff changeset
840
kono
parents:
diff changeset
841
kono
parents:
diff changeset
842
kono
parents:
diff changeset
843
kono
parents:
diff changeset
844
kono
parents:
diff changeset
845
kono
parents:
diff changeset
846 struct re_pattern_buffer; // defined elsewhere
kono
parents:
diff changeset
847 struct re_registers;
kono
parents:
diff changeset
848
kono
parents:
diff changeset
849 class Regex
kono
parents:
diff changeset
850 {
kono
parents:
diff changeset
851 private:
kono
parents:
diff changeset
852
kono
parents:
diff changeset
853 Regex(const Regex&) {} // no X(X&)
kono
parents:
diff changeset
854 void operator = (const Regex&) {} // no assignment
kono
parents:
diff changeset
855
kono
parents:
diff changeset
856 protected:
kono
parents:
diff changeset
857 re_pattern_buffer* buf;
kono
parents:
diff changeset
858 re_registers* reg;
kono
parents:
diff changeset
859
kono
parents:
diff changeset
860 public:
kono
parents:
diff changeset
861 Regex(const char* t,
kono
parents:
diff changeset
862 int fast = 0,
kono
parents:
diff changeset
863 int bufsize = 40,
kono
parents:
diff changeset
864 const char* transtable = 0);
kono
parents:
diff changeset
865
kono
parents:
diff changeset
866 ~Regex();
kono
parents:
diff changeset
867
kono
parents:
diff changeset
868 int match(const char* s, int len, int pos = 0) const;
kono
parents:
diff changeset
869 int search(const char* s, int len,
kono
parents:
diff changeset
870 int& matchlen, int startpos = 0) const;
kono
parents:
diff changeset
871 int match_info(int& start, int& length, int nth = 0) const;
kono
parents:
diff changeset
872
kono
parents:
diff changeset
873 int OK() const; // representation invariant
kono
parents:
diff changeset
874 };
kono
parents:
diff changeset
875
kono
parents:
diff changeset
876 // some built in regular expressions
kono
parents:
diff changeset
877
kono
parents:
diff changeset
878 extern const Regex RXwhite; // = "[ \n\t\r\v\f]+"
kono
parents:
diff changeset
879 extern const Regex RXint; // = "-?[0-9]+"
kono
parents:
diff changeset
880 extern const Regex RXdouble; // = "-?\\(\\([0-9]+\\.[0-9]*\\)\\|
kono
parents:
diff changeset
881 // \\([0-9]+\\)\\|\\(\\.[0-9]+\\)\\)
kono
parents:
diff changeset
882 // \\([eE][---+]?[0-9]+\\)?"
kono
parents:
diff changeset
883 extern const Regex RXalpha; // = "[A-Za-z]+"
kono
parents:
diff changeset
884 extern const Regex RXlowercase; // = "[a-z]+"
kono
parents:
diff changeset
885 extern const Regex RXuppercase; // = "[A-Z]+"
kono
parents:
diff changeset
886 extern const Regex RXalphanum; // = "[0-9A-Za-z]+"
kono
parents:
diff changeset
887 extern const Regex RXidentifier; // = "[A-Za-z_][A-Za-z0-9_]*"
kono
parents:
diff changeset
888
kono
parents:
diff changeset
889
kono
parents:
diff changeset
890
kono
parents:
diff changeset
891 //# 27 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" 2
kono
parents:
diff changeset
892
kono
parents:
diff changeset
893
kono
parents:
diff changeset
894 struct StrRep // internal String representations
kono
parents:
diff changeset
895 {
kono
parents:
diff changeset
896 unsigned short len; // string length
kono
parents:
diff changeset
897 unsigned short sz; // allocated space
kono
parents:
diff changeset
898 char s[1]; // the string starts here
kono
parents:
diff changeset
899 // (at least 1 char for trailing null)
kono
parents:
diff changeset
900 // allocated & expanded via non-public fcts
kono
parents:
diff changeset
901 };
kono
parents:
diff changeset
902
kono
parents:
diff changeset
903 // primitive ops on StrReps -- nearly all String fns go through these.
kono
parents:
diff changeset
904
kono
parents:
diff changeset
905 StrRep* Salloc(StrRep*, const char*, int, int);
kono
parents:
diff changeset
906 StrRep* Scopy(StrRep*, StrRep*);
kono
parents:
diff changeset
907 StrRep* Sresize(StrRep*, int);
kono
parents:
diff changeset
908 StrRep* Scat(StrRep*, const char*, int, const char*, int);
kono
parents:
diff changeset
909 StrRep* Scat(StrRep*, const char*, int,const char*,int, const char*,int);
kono
parents:
diff changeset
910 StrRep* Sprepend(StrRep*, const char*, int);
kono
parents:
diff changeset
911 StrRep* Sreverse(StrRep*, StrRep*);
kono
parents:
diff changeset
912 StrRep* Supcase(StrRep*, StrRep*);
kono
parents:
diff changeset
913 StrRep* Sdowncase(StrRep*, StrRep*);
kono
parents:
diff changeset
914 StrRep* Scapitalize(StrRep*, StrRep*);
kono
parents:
diff changeset
915
kono
parents:
diff changeset
916 // These classes need to be defined in the order given
kono
parents:
diff changeset
917
kono
parents:
diff changeset
918 class String;
kono
parents:
diff changeset
919 class SubString;
kono
parents:
diff changeset
920
kono
parents:
diff changeset
921 class SubString
kono
parents:
diff changeset
922 {
kono
parents:
diff changeset
923 friend class String;
kono
parents:
diff changeset
924 protected:
kono
parents:
diff changeset
925
kono
parents:
diff changeset
926 String& S; // The String I'm a substring of
kono
parents:
diff changeset
927 unsigned short pos; // starting position in S's rep
kono
parents:
diff changeset
928 unsigned short len; // length of substring
kono
parents:
diff changeset
929
kono
parents:
diff changeset
930 void assign(StrRep*, const char*, int = -1);
kono
parents:
diff changeset
931 SubString(String& x, int p, int l);
kono
parents:
diff changeset
932 SubString(const SubString& x);
kono
parents:
diff changeset
933
kono
parents:
diff changeset
934 public:
kono
parents:
diff changeset
935
kono
parents:
diff changeset
936 // Note there are no public constructors. SubStrings are always
kono
parents:
diff changeset
937 // created via String operations
kono
parents:
diff changeset
938
kono
parents:
diff changeset
939 ~SubString();
kono
parents:
diff changeset
940
kono
parents:
diff changeset
941 void operator = (const String& y);
kono
parents:
diff changeset
942 void operator = (const SubString& y);
kono
parents:
diff changeset
943 void operator = (const char* t);
kono
parents:
diff changeset
944 void operator = (char c);
kono
parents:
diff changeset
945
kono
parents:
diff changeset
946 // return 1 if target appears anywhere in SubString; else 0
kono
parents:
diff changeset
947
kono
parents:
diff changeset
948 int contains(char c) const;
kono
parents:
diff changeset
949 int contains(const String& y) const;
kono
parents:
diff changeset
950 int contains(const SubString& y) const;
kono
parents:
diff changeset
951 int contains(const char* t) const;
kono
parents:
diff changeset
952 int contains(const Regex& r) const;
kono
parents:
diff changeset
953
kono
parents:
diff changeset
954 // return 1 if target matches entire SubString
kono
parents:
diff changeset
955
kono
parents:
diff changeset
956 int matches(const Regex& r) const;
kono
parents:
diff changeset
957
kono
parents:
diff changeset
958 // IO
kono
parents:
diff changeset
959
kono
parents:
diff changeset
960 friend ostream& operator<<(ostream& s, const SubString& x);
kono
parents:
diff changeset
961
kono
parents:
diff changeset
962 // status
kono
parents:
diff changeset
963
kono
parents:
diff changeset
964 unsigned int length() const;
kono
parents:
diff changeset
965 int empty() const;
kono
parents:
diff changeset
966 const char* chars() const;
kono
parents:
diff changeset
967
kono
parents:
diff changeset
968 int OK() const;
kono
parents:
diff changeset
969
kono
parents:
diff changeset
970 };
kono
parents:
diff changeset
971
kono
parents:
diff changeset
972
kono
parents:
diff changeset
973 class String
kono
parents:
diff changeset
974 {
kono
parents:
diff changeset
975 friend class SubString;
kono
parents:
diff changeset
976
kono
parents:
diff changeset
977 protected:
kono
parents:
diff changeset
978 StrRep* rep; // Strings are pointers to their representations
kono
parents:
diff changeset
979
kono
parents:
diff changeset
980 // some helper functions
kono
parents:
diff changeset
981
kono
parents:
diff changeset
982 int search(int, int, const char*, int = -1) const;
kono
parents:
diff changeset
983 int search(int, int, char) const;
kono
parents:
diff changeset
984 int match(int, int, int, const char*, int = -1) const;
kono
parents:
diff changeset
985 int _gsub(const char*, int, const char* ,int);
kono
parents:
diff changeset
986 int _gsub(const Regex&, const char*, int);
kono
parents:
diff changeset
987 SubString _substr(int, int);
kono
parents:
diff changeset
988
kono
parents:
diff changeset
989 public:
kono
parents:
diff changeset
990
kono
parents:
diff changeset
991 // constructors & assignment
kono
parents:
diff changeset
992
kono
parents:
diff changeset
993 String();
kono
parents:
diff changeset
994 String(const String& x);
kono
parents:
diff changeset
995 String(const SubString& x);
kono
parents:
diff changeset
996 String(const char* t);
kono
parents:
diff changeset
997 String(const char* t, int len);
kono
parents:
diff changeset
998 String(char c);
kono
parents:
diff changeset
999
kono
parents:
diff changeset
1000 ~String();
kono
parents:
diff changeset
1001
kono
parents:
diff changeset
1002 void operator = (const String& y);
kono
parents:
diff changeset
1003 void operator = (const char* y);
kono
parents:
diff changeset
1004 void operator = (char c);
kono
parents:
diff changeset
1005 void operator = (const SubString& y);
kono
parents:
diff changeset
1006
kono
parents:
diff changeset
1007 // concatenation
kono
parents:
diff changeset
1008
kono
parents:
diff changeset
1009 void operator += (const String& y);
kono
parents:
diff changeset
1010 void operator += (const SubString& y);
kono
parents:
diff changeset
1011 void operator += (const char* t);
kono
parents:
diff changeset
1012 void operator += (char c);
kono
parents:
diff changeset
1013
kono
parents:
diff changeset
1014 void prepend(const String& y);
kono
parents:
diff changeset
1015 void prepend(const SubString& y);
kono
parents:
diff changeset
1016 void prepend(const char* t);
kono
parents:
diff changeset
1017 void prepend(char c);
kono
parents:
diff changeset
1018
kono
parents:
diff changeset
1019
kono
parents:
diff changeset
1020 // procedural versions:
kono
parents:
diff changeset
1021 // concatenate first 2 args, store result in last arg
kono
parents:
diff changeset
1022
kono
parents:
diff changeset
1023 friend void cat(const String&, const String&, String&);
kono
parents:
diff changeset
1024 friend void cat(const String&, const SubString&, String&);
kono
parents:
diff changeset
1025 friend void cat(const String&, const char*, String&);
kono
parents:
diff changeset
1026 friend void cat(const String&, char, String&);
kono
parents:
diff changeset
1027
kono
parents:
diff changeset
1028 friend void cat(const SubString&, const String&, String&);
kono
parents:
diff changeset
1029 friend void cat(const SubString&, const SubString&, String&);
kono
parents:
diff changeset
1030 friend void cat(const SubString&, const char*, String&);
kono
parents:
diff changeset
1031 friend void cat(const SubString&, char, String&);
kono
parents:
diff changeset
1032
kono
parents:
diff changeset
1033 friend void cat(const char*, const String&, String&);
kono
parents:
diff changeset
1034 friend void cat(const char*, const SubString&, String&);
kono
parents:
diff changeset
1035 friend void cat(const char*, const char*, String&);
kono
parents:
diff changeset
1036 friend void cat(const char*, char, String&);
kono
parents:
diff changeset
1037
kono
parents:
diff changeset
1038 // double concatenation, by request. (yes, there are too many versions,
kono
parents:
diff changeset
1039 // but if one is supported, then the others should be too...)
kono
parents:
diff changeset
1040 // Concatenate first 3 args, store in last arg
kono
parents:
diff changeset
1041
kono
parents:
diff changeset
1042 friend void cat(const String&,const String&, const String&,String&);
kono
parents:
diff changeset
1043 friend void cat(const String&,const String&,const SubString&,String&);
kono
parents:
diff changeset
1044 friend void cat(const String&,const String&, const char*, String&);
kono
parents:
diff changeset
1045 friend void cat(const String&,const String&, char, String&);
kono
parents:
diff changeset
1046 friend void cat(const String&,const SubString&,const String&,String&);
kono
parents:
diff changeset
1047 friend void cat(const String&,const SubString&,const SubString&,String&);
kono
parents:
diff changeset
1048 friend void cat(const String&,const SubString&, const char*, String&);
kono
parents:
diff changeset
1049 friend void cat(const String&,const SubString&, char, String&);
kono
parents:
diff changeset
1050 friend void cat(const String&,const char*, const String&, String&);
kono
parents:
diff changeset
1051 friend void cat(const String&,const char*, const SubString&, String&);
kono
parents:
diff changeset
1052 friend void cat(const String&,const char*, const char*, String&);
kono
parents:
diff changeset
1053 friend void cat(const String&,const char*, char, String&);
kono
parents:
diff changeset
1054
kono
parents:
diff changeset
1055 friend void cat(const char*, const String&, const String&,String&);
kono
parents:
diff changeset
1056 friend void cat(const char*,const String&,const SubString&,String&);
kono
parents:
diff changeset
1057 friend void cat(const char*,const String&, const char*, String&);
kono
parents:
diff changeset
1058 friend void cat(const char*,const String&, char, String&);
kono
parents:
diff changeset
1059 friend void cat(const char*,const SubString&,const String&,String&);
kono
parents:
diff changeset
1060 friend void cat(const char*,const SubString&,const SubString&,String&);
kono
parents:
diff changeset
1061 friend void cat(const char*,const SubString&, const char*, String&);
kono
parents:
diff changeset
1062 friend void cat(const char*,const SubString&, char, String&);
kono
parents:
diff changeset
1063 friend void cat(const char*,const char*, const String&, String&);
kono
parents:
diff changeset
1064 friend void cat(const char*,const char*, const SubString&, String&);
kono
parents:
diff changeset
1065 friend void cat(const char*,const char*, const char*, String&);
kono
parents:
diff changeset
1066 friend void cat(const char*,const char*, char, String&);
kono
parents:
diff changeset
1067
kono
parents:
diff changeset
1068
kono
parents:
diff changeset
1069 // searching & matching
kono
parents:
diff changeset
1070
kono
parents:
diff changeset
1071 // return position of target in string or -1 for failure
kono
parents:
diff changeset
1072
kono
parents:
diff changeset
1073 int index(char c, int startpos = 0) const;
kono
parents:
diff changeset
1074 int index(const String& y, int startpos = 0) const;
kono
parents:
diff changeset
1075 int index(const SubString& y, int startpos = 0) const;
kono
parents:
diff changeset
1076 int index(const char* t, int startpos = 0) const;
kono
parents:
diff changeset
1077 int index(const Regex& r, int startpos = 0) const;
kono
parents:
diff changeset
1078
kono
parents:
diff changeset
1079 // return 1 if target appears anyhere in String; else 0
kono
parents:
diff changeset
1080
kono
parents:
diff changeset
1081 int contains(char c) const;
kono
parents:
diff changeset
1082 int contains(const String& y) const;
kono
parents:
diff changeset
1083 int contains(const SubString& y) const;
kono
parents:
diff changeset
1084 int contains(const char* t) const;
kono
parents:
diff changeset
1085 int contains(const Regex& r) const;
kono
parents:
diff changeset
1086
kono
parents:
diff changeset
1087 // return 1 if target appears anywhere after position pos
kono
parents:
diff changeset
1088 // (or before, if pos is negative) in String; else 0
kono
parents:
diff changeset
1089
kono
parents:
diff changeset
1090 int contains(char c, int pos) const;
kono
parents:
diff changeset
1091 int contains(const String& y, int pos) const;
kono
parents:
diff changeset
1092 int contains(const SubString& y, int pos) const;
kono
parents:
diff changeset
1093 int contains(const char* t, int pos) const;
kono
parents:
diff changeset
1094 int contains(const Regex& r, int pos) const;
kono
parents:
diff changeset
1095
kono
parents:
diff changeset
1096 // return 1 if target appears at position pos in String; else 0
kono
parents:
diff changeset
1097
kono
parents:
diff changeset
1098 int matches(char c, int pos = 0) const;
kono
parents:
diff changeset
1099 int matches(const String& y, int pos = 0) const;
kono
parents:
diff changeset
1100 int matches(const SubString& y, int pos = 0) const;
kono
parents:
diff changeset
1101 int matches(const char* t, int pos = 0) const;
kono
parents:
diff changeset
1102 int matches(const Regex& r, int pos = 0) const;
kono
parents:
diff changeset
1103
kono
parents:
diff changeset
1104 // return number of occurences of target in String
kono
parents:
diff changeset
1105
kono
parents:
diff changeset
1106 int freq(char c) const;
kono
parents:
diff changeset
1107 int freq(const String& y) const;
kono
parents:
diff changeset
1108 int freq(const SubString& y) const;
kono
parents:
diff changeset
1109 int freq(const char* t) const;
kono
parents:
diff changeset
1110
kono
parents:
diff changeset
1111 // SubString extraction
kono
parents:
diff changeset
1112
kono
parents:
diff changeset
1113 // Note that you can't take a substring of a const String, since
kono
parents:
diff changeset
1114 // this leaves open the possiblility of indirectly modifying the
kono
parents:
diff changeset
1115 // String through the SubString
kono
parents:
diff changeset
1116
kono
parents:
diff changeset
1117 SubString at(int pos, int len);
kono
parents:
diff changeset
1118 SubString operator () (int pos, int len); // synonym for at
kono
parents:
diff changeset
1119
kono
parents:
diff changeset
1120 SubString at(const String& x, int startpos = 0);
kono
parents:
diff changeset
1121 SubString at(const SubString& x, int startpos = 0);
kono
parents:
diff changeset
1122 SubString at(const char* t, int startpos = 0);
kono
parents:
diff changeset
1123 SubString at(char c, int startpos = 0);
kono
parents:
diff changeset
1124 SubString at(const Regex& r, int startpos = 0);
kono
parents:
diff changeset
1125
kono
parents:
diff changeset
1126 SubString before(int pos);
kono
parents:
diff changeset
1127 SubString before(const String& x, int startpos = 0);
kono
parents:
diff changeset
1128 SubString before(const SubString& x, int startpos = 0);
kono
parents:
diff changeset
1129 SubString before(const char* t, int startpos = 0);
kono
parents:
diff changeset
1130 SubString before(char c, int startpos = 0);
kono
parents:
diff changeset
1131 SubString before(const Regex& r, int startpos = 0);
kono
parents:
diff changeset
1132
kono
parents:
diff changeset
1133 SubString through(int pos);
kono
parents:
diff changeset
1134 SubString through(const String& x, int startpos = 0);
kono
parents:
diff changeset
1135 SubString through(const SubString& x, int startpos = 0);
kono
parents:
diff changeset
1136 SubString through(const char* t, int startpos = 0);
kono
parents:
diff changeset
1137 SubString through(char c, int startpos = 0);
kono
parents:
diff changeset
1138 SubString through(const Regex& r, int startpos = 0);
kono
parents:
diff changeset
1139
kono
parents:
diff changeset
1140 SubString from(int pos);
kono
parents:
diff changeset
1141 SubString from(const String& x, int startpos = 0);
kono
parents:
diff changeset
1142 SubString from(const SubString& x, int startpos = 0);
kono
parents:
diff changeset
1143 SubString from(const char* t, int startpos = 0);
kono
parents:
diff changeset
1144 SubString from(char c, int startpos = 0);
kono
parents:
diff changeset
1145 SubString from(const Regex& r, int startpos = 0);
kono
parents:
diff changeset
1146
kono
parents:
diff changeset
1147 SubString after(int pos);
kono
parents:
diff changeset
1148 SubString after(const String& x, int startpos = 0);
kono
parents:
diff changeset
1149 SubString after(const SubString& x, int startpos = 0);
kono
parents:
diff changeset
1150 SubString after(const char* t, int startpos = 0);
kono
parents:
diff changeset
1151 SubString after(char c, int startpos = 0);
kono
parents:
diff changeset
1152 SubString after(const Regex& r, int startpos = 0);
kono
parents:
diff changeset
1153
kono
parents:
diff changeset
1154
kono
parents:
diff changeset
1155 // deletion
kono
parents:
diff changeset
1156
kono
parents:
diff changeset
1157 // delete len chars starting at pos
kono
parents:
diff changeset
1158 void del(int pos, int len);
kono
parents:
diff changeset
1159
kono
parents:
diff changeset
1160 // delete the first occurrence of target after startpos
kono
parents:
diff changeset
1161
kono
parents:
diff changeset
1162 void del(const String& y, int startpos = 0);
kono
parents:
diff changeset
1163 void del(const SubString& y, int startpos = 0);
kono
parents:
diff changeset
1164 void del(const char* t, int startpos = 0);
kono
parents:
diff changeset
1165 void del(char c, int startpos = 0);
kono
parents:
diff changeset
1166 void del(const Regex& r, int startpos = 0);
kono
parents:
diff changeset
1167
kono
parents:
diff changeset
1168 // global substitution: substitute all occurrences of pat with repl
kono
parents:
diff changeset
1169
kono
parents:
diff changeset
1170 int gsub(const String& pat, const String& repl);
kono
parents:
diff changeset
1171 int gsub(const SubString& pat, const String& repl);
kono
parents:
diff changeset
1172 int gsub(const char* pat, const String& repl);
kono
parents:
diff changeset
1173 int gsub(const char* pat, const char* repl);
kono
parents:
diff changeset
1174 int gsub(const Regex& pat, const String& repl);
kono
parents:
diff changeset
1175
kono
parents:
diff changeset
1176 // friends & utilities
kono
parents:
diff changeset
1177
kono
parents:
diff changeset
1178 // split string into array res at separators; return number of elements
kono
parents:
diff changeset
1179
kono
parents:
diff changeset
1180 friend int split(const String& x, String res[], int maxn,
kono
parents:
diff changeset
1181 const String& sep);
kono
parents:
diff changeset
1182 friend int split(const String& x, String res[], int maxn,
kono
parents:
diff changeset
1183 const Regex& sep);
kono
parents:
diff changeset
1184
kono
parents:
diff changeset
1185 friend String common_prefix(const String& x, const String& y,
kono
parents:
diff changeset
1186 int startpos = 0);
kono
parents:
diff changeset
1187 friend String common_suffix(const String& x, const String& y,
kono
parents:
diff changeset
1188 int startpos = -1);
kono
parents:
diff changeset
1189 friend String replicate(char c, int n);
kono
parents:
diff changeset
1190 friend String replicate(const String& y, int n);
kono
parents:
diff changeset
1191 friend String join(String src[], int n, const String& sep);
kono
parents:
diff changeset
1192
kono
parents:
diff changeset
1193 // simple builtin transformations
kono
parents:
diff changeset
1194
kono
parents:
diff changeset
1195 friend String reverse(const String& x);
kono
parents:
diff changeset
1196 friend String upcase(const String& x);
kono
parents:
diff changeset
1197 friend String downcase(const String& x);
kono
parents:
diff changeset
1198 friend String capitalize(const String& x);
kono
parents:
diff changeset
1199
kono
parents:
diff changeset
1200 // in-place versions of above
kono
parents:
diff changeset
1201
kono
parents:
diff changeset
1202 void reverse();
kono
parents:
diff changeset
1203 void upcase();
kono
parents:
diff changeset
1204 void downcase();
kono
parents:
diff changeset
1205 void capitalize();
kono
parents:
diff changeset
1206
kono
parents:
diff changeset
1207 // element extraction
kono
parents:
diff changeset
1208
kono
parents:
diff changeset
1209 char& operator [] (int i);
kono
parents:
diff changeset
1210 char elem(int i) const;
kono
parents:
diff changeset
1211 char firstchar() const;
kono
parents:
diff changeset
1212 char lastchar() const;
kono
parents:
diff changeset
1213
kono
parents:
diff changeset
1214 // conversion
kono
parents:
diff changeset
1215
kono
parents:
diff changeset
1216 operator const char*() const;
kono
parents:
diff changeset
1217 const char* chars() const;
kono
parents:
diff changeset
1218
kono
parents:
diff changeset
1219
kono
parents:
diff changeset
1220 // IO
kono
parents:
diff changeset
1221
kono
parents:
diff changeset
1222 friend ostream& operator<<(ostream& s, const String& x);
kono
parents:
diff changeset
1223 friend ostream& operator<<(ostream& s, const SubString& x);
kono
parents:
diff changeset
1224 friend istream& operator>>(istream& s, String& x);
kono
parents:
diff changeset
1225
kono
parents:
diff changeset
1226 friend int readline(istream& s, String& x,
kono
parents:
diff changeset
1227 char terminator = '\n',
kono
parents:
diff changeset
1228 int discard_terminator = 1);
kono
parents:
diff changeset
1229
kono
parents:
diff changeset
1230 // status
kono
parents:
diff changeset
1231
kono
parents:
diff changeset
1232 unsigned int length() const;
kono
parents:
diff changeset
1233 int empty() const;
kono
parents:
diff changeset
1234
kono
parents:
diff changeset
1235 // preallocate some space for String
kono
parents:
diff changeset
1236 void alloc(int newsize);
kono
parents:
diff changeset
1237
kono
parents:
diff changeset
1238 // report current allocation (not length!)
kono
parents:
diff changeset
1239
kono
parents:
diff changeset
1240 int allocation() const;
kono
parents:
diff changeset
1241
kono
parents:
diff changeset
1242
kono
parents:
diff changeset
1243 volatile void error(const char* msg) const;
kono
parents:
diff changeset
1244
kono
parents:
diff changeset
1245 int OK() const;
kono
parents:
diff changeset
1246 };
kono
parents:
diff changeset
1247
kono
parents:
diff changeset
1248 typedef String StrTmp; // for backward compatibility
kono
parents:
diff changeset
1249
kono
parents:
diff changeset
1250 // other externs
kono
parents:
diff changeset
1251
kono
parents:
diff changeset
1252 int compare(const String& x, const String& y);
kono
parents:
diff changeset
1253 int compare(const String& x, const SubString& y);
kono
parents:
diff changeset
1254 int compare(const String& x, const char* y);
kono
parents:
diff changeset
1255 int compare(const SubString& x, const String& y);
kono
parents:
diff changeset
1256 int compare(const SubString& x, const SubString& y);
kono
parents:
diff changeset
1257 int compare(const SubString& x, const char* y);
kono
parents:
diff changeset
1258 int fcompare(const String& x, const String& y); // ignore case
kono
parents:
diff changeset
1259
kono
parents:
diff changeset
1260 extern StrRep _nilStrRep;
kono
parents:
diff changeset
1261 extern String _nilString;
kono
parents:
diff changeset
1262
kono
parents:
diff changeset
1263 // other inlines
kono
parents:
diff changeset
1264
kono
parents:
diff changeset
1265 String operator + (const String& x, const String& y);
kono
parents:
diff changeset
1266 String operator + (const String& x, const SubString& y);
kono
parents:
diff changeset
1267 String operator + (const String& x, const char* y);
kono
parents:
diff changeset
1268 String operator + (const String& x, char y);
kono
parents:
diff changeset
1269 String operator + (const SubString& x, const String& y);
kono
parents:
diff changeset
1270 String operator + (const SubString& x, const SubString& y);
kono
parents:
diff changeset
1271 String operator + (const SubString& x, const char* y);
kono
parents:
diff changeset
1272 String operator + (const SubString& x, char y);
kono
parents:
diff changeset
1273 String operator + (const char* x, const String& y);
kono
parents:
diff changeset
1274 String operator + (const char* x, const SubString& y);
kono
parents:
diff changeset
1275
kono
parents:
diff changeset
1276 int operator==(const String& x, const String& y);
kono
parents:
diff changeset
1277 int operator!=(const String& x, const String& y);
kono
parents:
diff changeset
1278 int operator> (const String& x, const String& y);
kono
parents:
diff changeset
1279 int operator>=(const String& x, const String& y);
kono
parents:
diff changeset
1280 int operator< (const String& x, const String& y);
kono
parents:
diff changeset
1281 int operator<=(const String& x, const String& y);
kono
parents:
diff changeset
1282 int operator==(const String& x, const SubString& y);
kono
parents:
diff changeset
1283 int operator!=(const String& x, const SubString& y);
kono
parents:
diff changeset
1284 int operator> (const String& x, const SubString& y);
kono
parents:
diff changeset
1285 int operator>=(const String& x, const SubString& y);
kono
parents:
diff changeset
1286 int operator< (const String& x, const SubString& y);
kono
parents:
diff changeset
1287 int operator<=(const String& x, const SubString& y);
kono
parents:
diff changeset
1288 int operator==(const String& x, const char* t);
kono
parents:
diff changeset
1289 int operator!=(const String& x, const char* t);
kono
parents:
diff changeset
1290 int operator> (const String& x, const char* t);
kono
parents:
diff changeset
1291 int operator>=(const String& x, const char* t);
kono
parents:
diff changeset
1292 int operator< (const String& x, const char* t);
kono
parents:
diff changeset
1293 int operator<=(const String& x, const char* t);
kono
parents:
diff changeset
1294 int operator==(const SubString& x, const String& y);
kono
parents:
diff changeset
1295 int operator!=(const SubString& x, const String& y);
kono
parents:
diff changeset
1296 int operator> (const SubString& x, const String& y);
kono
parents:
diff changeset
1297 int operator>=(const SubString& x, const String& y);
kono
parents:
diff changeset
1298 int operator< (const SubString& x, const String& y);
kono
parents:
diff changeset
1299 int operator<=(const SubString& x, const String& y);
kono
parents:
diff changeset
1300 int operator==(const SubString& x, const SubString& y);
kono
parents:
diff changeset
1301 int operator!=(const SubString& x, const SubString& y);
kono
parents:
diff changeset
1302 int operator> (const SubString& x, const SubString& y);
kono
parents:
diff changeset
1303 int operator>=(const SubString& x, const SubString& y);
kono
parents:
diff changeset
1304 int operator< (const SubString& x, const SubString& y);
kono
parents:
diff changeset
1305 int operator<=(const SubString& x, const SubString& y);
kono
parents:
diff changeset
1306 int operator==(const SubString& x, const char* t);
kono
parents:
diff changeset
1307 int operator!=(const SubString& x, const char* t);
kono
parents:
diff changeset
1308 int operator> (const SubString& x, const char* t);
kono
parents:
diff changeset
1309 int operator>=(const SubString& x, const char* t);
kono
parents:
diff changeset
1310 int operator< (const SubString& x, const char* t);
kono
parents:
diff changeset
1311 int operator<=(const SubString& x, const char* t);
kono
parents:
diff changeset
1312
kono
parents:
diff changeset
1313
kono
parents:
diff changeset
1314
kono
parents:
diff changeset
1315
kono
parents:
diff changeset
1316 // status reports, needed before defining other things
kono
parents:
diff changeset
1317
kono
parents:
diff changeset
1318 inline unsigned int String::length() const { return rep->len; }
kono
parents:
diff changeset
1319 inline int String::empty() const { return rep->len == 0; }
kono
parents:
diff changeset
1320 inline const char* String::chars() const { return &(rep->s[0]); }
kono
parents:
diff changeset
1321 inline int String::allocation() const { return rep->sz; }
kono
parents:
diff changeset
1322 inline void String::alloc(int newsize) { rep = Sresize(rep, newsize); }
kono
parents:
diff changeset
1323
kono
parents:
diff changeset
1324 inline unsigned int SubString::length() const { return len; }
kono
parents:
diff changeset
1325 inline int SubString::empty() const { return len == 0; }
kono
parents:
diff changeset
1326 inline const char* SubString::chars() const { return &(S.rep->s[pos]); }
kono
parents:
diff changeset
1327
kono
parents:
diff changeset
1328
kono
parents:
diff changeset
1329 // constructors
kono
parents:
diff changeset
1330
kono
parents:
diff changeset
1331 inline String::String()
kono
parents:
diff changeset
1332 : rep(&_nilStrRep) {}
kono
parents:
diff changeset
1333 inline String::String(const String& x)
kono
parents:
diff changeset
1334 : rep(Scopy(0, x.rep)) {}
kono
parents:
diff changeset
1335 inline String::String(const char* t)
kono
parents:
diff changeset
1336 : rep(Salloc(0, t, -1, -1)) {}
kono
parents:
diff changeset
1337 inline String::String(const char* t, int tlen)
kono
parents:
diff changeset
1338 : rep(Salloc(0, t, tlen, tlen)) {}
kono
parents:
diff changeset
1339 inline String::String(const SubString& y)
kono
parents:
diff changeset
1340 : rep(Salloc(0, y.chars(), y.length(), y.length())) {}
kono
parents:
diff changeset
1341 inline String::String(char c)
kono
parents:
diff changeset
1342 : rep(Salloc(0, &c, 1, 1)) {}
kono
parents:
diff changeset
1343
kono
parents:
diff changeset
1344 inline String::~String() { if (rep != &_nilStrRep) delete rep; }
kono
parents:
diff changeset
1345
kono
parents:
diff changeset
1346 inline SubString::SubString(const SubString& x)
kono
parents:
diff changeset
1347 :S(x.S), pos(x.pos), len(x.len) {}
kono
parents:
diff changeset
1348 inline SubString::SubString(String& x, int first, int l)
kono
parents:
diff changeset
1349 :S(x), pos(first), len(l) {}
kono
parents:
diff changeset
1350
kono
parents:
diff changeset
1351 inline SubString::~SubString() {}
kono
parents:
diff changeset
1352
kono
parents:
diff changeset
1353 // assignment
kono
parents:
diff changeset
1354
kono
parents:
diff changeset
1355 inline void String::operator = (const String& y)
kono
parents:
diff changeset
1356 {
kono
parents:
diff changeset
1357 rep = Scopy(rep, y.rep);
kono
parents:
diff changeset
1358 }
kono
parents:
diff changeset
1359
kono
parents:
diff changeset
1360 inline void String::operator=(const char* t)
kono
parents:
diff changeset
1361 {
kono
parents:
diff changeset
1362 rep = Salloc(rep, t, -1, -1);
kono
parents:
diff changeset
1363 }
kono
parents:
diff changeset
1364
kono
parents:
diff changeset
1365 inline void String::operator=(const SubString& y)
kono
parents:
diff changeset
1366 {
kono
parents:
diff changeset
1367 rep = Salloc(rep, y.chars(), y.length(), y.length());
kono
parents:
diff changeset
1368 }
kono
parents:
diff changeset
1369
kono
parents:
diff changeset
1370 inline void String::operator=(char c)
kono
parents:
diff changeset
1371 {
kono
parents:
diff changeset
1372 rep = Salloc(rep, &c, 1, 1);
kono
parents:
diff changeset
1373 }
kono
parents:
diff changeset
1374
kono
parents:
diff changeset
1375
kono
parents:
diff changeset
1376 inline void SubString::operator = (const char* ys)
kono
parents:
diff changeset
1377 {
kono
parents:
diff changeset
1378 assign(0, ys);
kono
parents:
diff changeset
1379 }
kono
parents:
diff changeset
1380
kono
parents:
diff changeset
1381 inline void SubString::operator = (char ch)
kono
parents:
diff changeset
1382 {
kono
parents:
diff changeset
1383 assign(0, &ch, 1);
kono
parents:
diff changeset
1384 }
kono
parents:
diff changeset
1385
kono
parents:
diff changeset
1386 inline void SubString::operator = (const String& y)
kono
parents:
diff changeset
1387 {
kono
parents:
diff changeset
1388 assign(y.rep, y.chars(), y.length());
kono
parents:
diff changeset
1389 }
kono
parents:
diff changeset
1390
kono
parents:
diff changeset
1391 inline void SubString::operator = (const SubString& y)
kono
parents:
diff changeset
1392 {
kono
parents:
diff changeset
1393 assign(y.S.rep, y.chars(), y.length());
kono
parents:
diff changeset
1394 }
kono
parents:
diff changeset
1395
kono
parents:
diff changeset
1396 // Zillions of cats...
kono
parents:
diff changeset
1397
kono
parents:
diff changeset
1398 inline void cat(const String& x, const String& y, String& r)
kono
parents:
diff changeset
1399 {
kono
parents:
diff changeset
1400 r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length());
kono
parents:
diff changeset
1401 }
kono
parents:
diff changeset
1402
kono
parents:
diff changeset
1403 inline void cat(const String& x, const SubString& y, String& r)
kono
parents:
diff changeset
1404 {
kono
parents:
diff changeset
1405 r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length());
kono
parents:
diff changeset
1406 }
kono
parents:
diff changeset
1407
kono
parents:
diff changeset
1408 inline void cat(const String& x, const char* y, String& r)
kono
parents:
diff changeset
1409 {
kono
parents:
diff changeset
1410 r.rep = Scat(r.rep, x.chars(), x.length(), y, -1);
kono
parents:
diff changeset
1411 }
kono
parents:
diff changeset
1412
kono
parents:
diff changeset
1413 inline void cat(const String& x, char y, String& r)
kono
parents:
diff changeset
1414 {
kono
parents:
diff changeset
1415 r.rep = Scat(r.rep, x.chars(), x.length(), &y, 1);
kono
parents:
diff changeset
1416 }
kono
parents:
diff changeset
1417
kono
parents:
diff changeset
1418 inline void cat(const SubString& x, const String& y, String& r)
kono
parents:
diff changeset
1419 {
kono
parents:
diff changeset
1420 r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length());
kono
parents:
diff changeset
1421 }
kono
parents:
diff changeset
1422
kono
parents:
diff changeset
1423 inline void cat(const SubString& x, const SubString& y, String& r)
kono
parents:
diff changeset
1424 {
kono
parents:
diff changeset
1425 r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length());
kono
parents:
diff changeset
1426 }
kono
parents:
diff changeset
1427
kono
parents:
diff changeset
1428 inline void cat(const SubString& x, const char* y, String& r)
kono
parents:
diff changeset
1429 {
kono
parents:
diff changeset
1430 r.rep = Scat(r.rep, x.chars(), x.length(), y, -1);
kono
parents:
diff changeset
1431 }
kono
parents:
diff changeset
1432
kono
parents:
diff changeset
1433 inline void cat(const SubString& x, char y, String& r)
kono
parents:
diff changeset
1434 {
kono
parents:
diff changeset
1435 r.rep = Scat(r.rep, x.chars(), x.length(), &y, 1);
kono
parents:
diff changeset
1436 }
kono
parents:
diff changeset
1437
kono
parents:
diff changeset
1438 inline void cat(const char* x, const String& y, String& r)
kono
parents:
diff changeset
1439 {
kono
parents:
diff changeset
1440 r.rep = Scat(r.rep, x, -1, y.chars(), y.length());
kono
parents:
diff changeset
1441 }
kono
parents:
diff changeset
1442
kono
parents:
diff changeset
1443 inline void cat(const char* x, const SubString& y, String& r)
kono
parents:
diff changeset
1444 {
kono
parents:
diff changeset
1445 r.rep = Scat(r.rep, x, -1, y.chars(), y.length());
kono
parents:
diff changeset
1446 }
kono
parents:
diff changeset
1447
kono
parents:
diff changeset
1448 inline void cat(const char* x, const char* y, String& r)
kono
parents:
diff changeset
1449 {
kono
parents:
diff changeset
1450 r.rep = Scat(r.rep, x, -1, y, -1);
kono
parents:
diff changeset
1451 }
kono
parents:
diff changeset
1452
kono
parents:
diff changeset
1453 inline void cat(const char* x, char y, String& r)
kono
parents:
diff changeset
1454 {
kono
parents:
diff changeset
1455 r.rep = Scat(r.rep, x, -1, &y, 1);
kono
parents:
diff changeset
1456 }
kono
parents:
diff changeset
1457
kono
parents:
diff changeset
1458 inline void cat(const String& a, const String& x, const String& y, String& r)
kono
parents:
diff changeset
1459 {
kono
parents:
diff changeset
1460 r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length());
kono
parents:
diff changeset
1461 }
kono
parents:
diff changeset
1462
kono
parents:
diff changeset
1463 inline void cat(const String& a, const String& x, const SubString& y, String& r)
kono
parents:
diff changeset
1464 {
kono
parents:
diff changeset
1465 r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length());
kono
parents:
diff changeset
1466 }
kono
parents:
diff changeset
1467
kono
parents:
diff changeset
1468 inline void cat(const String& a, const String& x, const char* y, String& r)
kono
parents:
diff changeset
1469 {
kono
parents:
diff changeset
1470 r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y, -1);
kono
parents:
diff changeset
1471 }
kono
parents:
diff changeset
1472
kono
parents:
diff changeset
1473 inline void cat(const String& a, const String& x, char y, String& r)
kono
parents:
diff changeset
1474 {
kono
parents:
diff changeset
1475 r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), &y, 1);
kono
parents:
diff changeset
1476 }
kono
parents:
diff changeset
1477
kono
parents:
diff changeset
1478 inline void cat(const String& a, const SubString& x, const String& y, String& r)
kono
parents:
diff changeset
1479 {
kono
parents:
diff changeset
1480 r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length());
kono
parents:
diff changeset
1481 }
kono
parents:
diff changeset
1482
kono
parents:
diff changeset
1483 inline void cat(const String& a, const SubString& x, const SubString& y, String& r)
kono
parents:
diff changeset
1484 {
kono
parents:
diff changeset
1485 r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length());
kono
parents:
diff changeset
1486 }
kono
parents:
diff changeset
1487
kono
parents:
diff changeset
1488 inline void cat(const String& a, const SubString& x, const char* y, String& r)
kono
parents:
diff changeset
1489 {
kono
parents:
diff changeset
1490 r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y, -1);
kono
parents:
diff changeset
1491 }
kono
parents:
diff changeset
1492
kono
parents:
diff changeset
1493 inline void cat(const String& a, const SubString& x, char y, String& r)
kono
parents:
diff changeset
1494 {
kono
parents:
diff changeset
1495 r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), &y, 1);
kono
parents:
diff changeset
1496 }
kono
parents:
diff changeset
1497
kono
parents:
diff changeset
1498 inline void cat(const String& a, const char* x, const String& y, String& r)
kono
parents:
diff changeset
1499 {
kono
parents:
diff changeset
1500 r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y.chars(), y.length());
kono
parents:
diff changeset
1501 }
kono
parents:
diff changeset
1502
kono
parents:
diff changeset
1503 inline void cat(const String& a, const char* x, const SubString& y, String& r)
kono
parents:
diff changeset
1504 {
kono
parents:
diff changeset
1505 r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y.chars(), y.length());
kono
parents:
diff changeset
1506 }
kono
parents:
diff changeset
1507
kono
parents:
diff changeset
1508 inline void cat(const String& a, const char* x, const char* y, String& r)
kono
parents:
diff changeset
1509 {
kono
parents:
diff changeset
1510 r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y, -1);
kono
parents:
diff changeset
1511 }
kono
parents:
diff changeset
1512
kono
parents:
diff changeset
1513 inline void cat(const String& a, const char* x, char y, String& r)
kono
parents:
diff changeset
1514 {
kono
parents:
diff changeset
1515 r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, &y, 1);
kono
parents:
diff changeset
1516 }
kono
parents:
diff changeset
1517
kono
parents:
diff changeset
1518
kono
parents:
diff changeset
1519 inline void cat(const char* a, const String& x, const String& y, String& r)
kono
parents:
diff changeset
1520 {
kono
parents:
diff changeset
1521 r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length());
kono
parents:
diff changeset
1522 }
kono
parents:
diff changeset
1523
kono
parents:
diff changeset
1524 inline void cat(const char* a, const String& x, const SubString& y, String& r)
kono
parents:
diff changeset
1525 {
kono
parents:
diff changeset
1526 r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length());
kono
parents:
diff changeset
1527 }
kono
parents:
diff changeset
1528
kono
parents:
diff changeset
1529 inline void cat(const char* a, const String& x, const char* y, String& r)
kono
parents:
diff changeset
1530 {
kono
parents:
diff changeset
1531 r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y, -1);
kono
parents:
diff changeset
1532 }
kono
parents:
diff changeset
1533
kono
parents:
diff changeset
1534 inline void cat(const char* a, const String& x, char y, String& r)
kono
parents:
diff changeset
1535 {
kono
parents:
diff changeset
1536 r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), &y, 1);
kono
parents:
diff changeset
1537 }
kono
parents:
diff changeset
1538
kono
parents:
diff changeset
1539 inline void cat(const char* a, const SubString& x, const String& y, String& r)
kono
parents:
diff changeset
1540 {
kono
parents:
diff changeset
1541 r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length());
kono
parents:
diff changeset
1542 }
kono
parents:
diff changeset
1543
kono
parents:
diff changeset
1544 inline void cat(const char* a, const SubString& x, const SubString& y, String& r)
kono
parents:
diff changeset
1545 {
kono
parents:
diff changeset
1546 r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length());
kono
parents:
diff changeset
1547 }
kono
parents:
diff changeset
1548
kono
parents:
diff changeset
1549 inline void cat(const char* a, const SubString& x, const char* y, String& r)
kono
parents:
diff changeset
1550 {
kono
parents:
diff changeset
1551 r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y, -1);
kono
parents:
diff changeset
1552 }
kono
parents:
diff changeset
1553
kono
parents:
diff changeset
1554 inline void cat(const char* a, const SubString& x, char y, String& r)
kono
parents:
diff changeset
1555 {
kono
parents:
diff changeset
1556 r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), &y, 1);
kono
parents:
diff changeset
1557 }
kono
parents:
diff changeset
1558
kono
parents:
diff changeset
1559 inline void cat(const char* a, const char* x, const String& y, String& r)
kono
parents:
diff changeset
1560 {
kono
parents:
diff changeset
1561 r.rep = Scat(r.rep, a, -1, x, -1, y.chars(), y.length());
kono
parents:
diff changeset
1562 }
kono
parents:
diff changeset
1563
kono
parents:
diff changeset
1564 inline void cat(const char* a, const char* x, const SubString& y, String& r)
kono
parents:
diff changeset
1565 {
kono
parents:
diff changeset
1566 r.rep = Scat(r.rep, a, -1, x, -1, y.chars(), y.length());
kono
parents:
diff changeset
1567 }
kono
parents:
diff changeset
1568
kono
parents:
diff changeset
1569 inline void cat(const char* a, const char* x, const char* y, String& r)
kono
parents:
diff changeset
1570 {
kono
parents:
diff changeset
1571 r.rep = Scat(r.rep, a, -1, x, -1, y, -1);
kono
parents:
diff changeset
1572 }
kono
parents:
diff changeset
1573
kono
parents:
diff changeset
1574 inline void cat(const char* a, const char* x, char y, String& r)
kono
parents:
diff changeset
1575 {
kono
parents:
diff changeset
1576 r.rep = Scat(r.rep, a, -1, x, -1, &y, 1);
kono
parents:
diff changeset
1577 }
kono
parents:
diff changeset
1578
kono
parents:
diff changeset
1579
kono
parents:
diff changeset
1580 // operator versions
kono
parents:
diff changeset
1581
kono
parents:
diff changeset
1582 inline void String::operator +=(const String& y)
kono
parents:
diff changeset
1583 {
kono
parents:
diff changeset
1584 cat(*this, y, *this);
kono
parents:
diff changeset
1585 }
kono
parents:
diff changeset
1586
kono
parents:
diff changeset
1587 inline void String::operator +=(const SubString& y)
kono
parents:
diff changeset
1588 {
kono
parents:
diff changeset
1589 cat(*this, y, *this);
kono
parents:
diff changeset
1590 }
kono
parents:
diff changeset
1591
kono
parents:
diff changeset
1592 inline void String::operator += (const char* y)
kono
parents:
diff changeset
1593 {
kono
parents:
diff changeset
1594 cat(*this, y, *this);
kono
parents:
diff changeset
1595 }
kono
parents:
diff changeset
1596
kono
parents:
diff changeset
1597 inline void String:: operator +=(char y)
kono
parents:
diff changeset
1598 {
kono
parents:
diff changeset
1599 cat(*this, y, *this);
kono
parents:
diff changeset
1600 }
kono
parents:
diff changeset
1601
kono
parents:
diff changeset
1602 // constructive concatenation
kono
parents:
diff changeset
1603
kono
parents:
diff changeset
1604
kono
parents:
diff changeset
1605
kono
parents:
diff changeset
1606 inline String operator + (const String& x, const String& y) return r; // { dg-error "" }
kono
parents:
diff changeset
1607 {
kono
parents:
diff changeset
1608 cat(x, y, r); // { dg-error "" }
kono
parents:
diff changeset
1609 }
kono
parents:
diff changeset
1610
kono
parents:
diff changeset
1611 inline String operator + (const String& x, const SubString& y) return r; // { dg-error "" }
kono
parents:
diff changeset
1612 {
kono
parents:
diff changeset
1613 cat(x, y, r); // { dg-error "" }
kono
parents:
diff changeset
1614 }
kono
parents:
diff changeset
1615
kono
parents:
diff changeset
1616 inline String operator + (const String& x, const char* y) return r; // { dg-error "" }
kono
parents:
diff changeset
1617 {
kono
parents:
diff changeset
1618 cat(x, y, r); // { dg-error "" }
kono
parents:
diff changeset
1619 }
kono
parents:
diff changeset
1620
kono
parents:
diff changeset
1621 inline String operator + (const String& x, char y) return r; // { dg-error "" }
kono
parents:
diff changeset
1622 {
kono
parents:
diff changeset
1623 cat(x, y, r); // { dg-error "" }
kono
parents:
diff changeset
1624 }
kono
parents:
diff changeset
1625
kono
parents:
diff changeset
1626 inline String operator + (const SubString& x, const String& y) return r; // { dg-error "" }
kono
parents:
diff changeset
1627 {
kono
parents:
diff changeset
1628 cat(x, y, r); // { dg-error "" }
kono
parents:
diff changeset
1629 }
kono
parents:
diff changeset
1630
kono
parents:
diff changeset
1631 inline String operator + (const SubString& x, const SubString& y) return r; // { dg-error "" }
kono
parents:
diff changeset
1632 {
kono
parents:
diff changeset
1633 cat(x, y, r); // { dg-error "" }
kono
parents:
diff changeset
1634 }
kono
parents:
diff changeset
1635
kono
parents:
diff changeset
1636 inline String operator + (const SubString& x, const char* y) return r; // { dg-error "" }
kono
parents:
diff changeset
1637 {
kono
parents:
diff changeset
1638 cat(x, y, r); // { dg-error "" }
kono
parents:
diff changeset
1639 }
kono
parents:
diff changeset
1640
kono
parents:
diff changeset
1641 inline String operator + (const SubString& x, char y) return r; // { dg-error "" }
kono
parents:
diff changeset
1642 {
kono
parents:
diff changeset
1643 cat(x, y, r); // { dg-error "" }
kono
parents:
diff changeset
1644 }
kono
parents:
diff changeset
1645
kono
parents:
diff changeset
1646 inline String operator + (const char* x, const String& y) return r; // { dg-error "" }
kono
parents:
diff changeset
1647 {
kono
parents:
diff changeset
1648 cat(x, y, r); // { dg-error "" }
kono
parents:
diff changeset
1649 }
kono
parents:
diff changeset
1650
kono
parents:
diff changeset
1651 inline String operator + (const char* x, const SubString& y) return r; // { dg-error "" }
kono
parents:
diff changeset
1652 {
kono
parents:
diff changeset
1653 cat(x, y, r); // { dg-error "" }
kono
parents:
diff changeset
1654 }
kono
parents:
diff changeset
1655
kono
parents:
diff changeset
1656 inline String reverse(const String& x) return r; // { dg-error "" }
kono
parents:
diff changeset
1657 {
kono
parents:
diff changeset
1658 r.rep = Sreverse(x.rep, r.rep); // { dg-error "" }
kono
parents:
diff changeset
1659 }
kono
parents:
diff changeset
1660
kono
parents:
diff changeset
1661 inline String upcase(const String& x) return r; // { dg-error "" }
kono
parents:
diff changeset
1662 {
kono
parents:
diff changeset
1663 r.rep = Supcase(x.rep, r.rep); // { dg-error "" }
kono
parents:
diff changeset
1664 }
kono
parents:
diff changeset
1665
kono
parents:
diff changeset
1666 inline String downcase(const String& x) return r; // { dg-error "" }
kono
parents:
diff changeset
1667 {
kono
parents:
diff changeset
1668 r.rep = Sdowncase(x.rep, r.rep); // { dg-error "" }
kono
parents:
diff changeset
1669 }
kono
parents:
diff changeset
1670
kono
parents:
diff changeset
1671 inline String capitalize(const String& x) return r; // { dg-error "" }
kono
parents:
diff changeset
1672 {
kono
parents:
diff changeset
1673 r.rep = Scapitalize(x.rep, r.rep); // { dg-error "" }
kono
parents:
diff changeset
1674 }
kono
parents:
diff changeset
1675
kono
parents:
diff changeset
1676 //# 883 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h"
kono
parents:
diff changeset
1677
kono
parents:
diff changeset
1678
kono
parents:
diff changeset
1679 // prepend
kono
parents:
diff changeset
1680
kono
parents:
diff changeset
1681 inline void String::prepend(const String& y)
kono
parents:
diff changeset
1682 {
kono
parents:
diff changeset
1683 rep = Sprepend(rep, y.chars(), y.length());
kono
parents:
diff changeset
1684 }
kono
parents:
diff changeset
1685
kono
parents:
diff changeset
1686 inline void String::prepend(const char* y)
kono
parents:
diff changeset
1687 {
kono
parents:
diff changeset
1688 rep = Sprepend(rep, y, -1);
kono
parents:
diff changeset
1689 }
kono
parents:
diff changeset
1690
kono
parents:
diff changeset
1691 inline void String::prepend(char y)
kono
parents:
diff changeset
1692 {
kono
parents:
diff changeset
1693 rep = Sprepend(rep, &y, 1);
kono
parents:
diff changeset
1694 }
kono
parents:
diff changeset
1695
kono
parents:
diff changeset
1696 inline void String::prepend(const SubString& y)
kono
parents:
diff changeset
1697 {
kono
parents:
diff changeset
1698 rep = Sprepend(rep, y.chars(), y.length());
kono
parents:
diff changeset
1699 }
kono
parents:
diff changeset
1700
kono
parents:
diff changeset
1701 // misc transformations
kono
parents:
diff changeset
1702
kono
parents:
diff changeset
1703
kono
parents:
diff changeset
1704 inline void String::reverse()
kono
parents:
diff changeset
1705 {
kono
parents:
diff changeset
1706 rep = Sreverse(rep, rep);
kono
parents:
diff changeset
1707 }
kono
parents:
diff changeset
1708
kono
parents:
diff changeset
1709
kono
parents:
diff changeset
1710 inline void String::upcase()
kono
parents:
diff changeset
1711 {
kono
parents:
diff changeset
1712 rep = Supcase(rep, rep);
kono
parents:
diff changeset
1713 }
kono
parents:
diff changeset
1714
kono
parents:
diff changeset
1715
kono
parents:
diff changeset
1716 inline void String::downcase()
kono
parents:
diff changeset
1717 {
kono
parents:
diff changeset
1718 rep = Sdowncase(rep, rep);
kono
parents:
diff changeset
1719 }
kono
parents:
diff changeset
1720
kono
parents:
diff changeset
1721
kono
parents:
diff changeset
1722 inline void String::capitalize()
kono
parents:
diff changeset
1723 {
kono
parents:
diff changeset
1724 rep = Scapitalize(rep, rep);
kono
parents:
diff changeset
1725 }
kono
parents:
diff changeset
1726
kono
parents:
diff changeset
1727 // element extraction
kono
parents:
diff changeset
1728
kono
parents:
diff changeset
1729 inline char& String::operator [] (int i)
kono
parents:
diff changeset
1730 {
kono
parents:
diff changeset
1731 if (((unsigned)i) >= length()) error("invalid index");
kono
parents:
diff changeset
1732 return rep->s[i];
kono
parents:
diff changeset
1733 }
kono
parents:
diff changeset
1734
kono
parents:
diff changeset
1735 inline char String::elem (int i) const
kono
parents:
diff changeset
1736 {
kono
parents:
diff changeset
1737 if (((unsigned)i) >= length()) error("invalid index");
kono
parents:
diff changeset
1738 return rep->s[i];
kono
parents:
diff changeset
1739 }
kono
parents:
diff changeset
1740
kono
parents:
diff changeset
1741 inline char String::firstchar() const
kono
parents:
diff changeset
1742 {
kono
parents:
diff changeset
1743 return elem(0);
kono
parents:
diff changeset
1744 }
kono
parents:
diff changeset
1745
kono
parents:
diff changeset
1746 inline char String::lastchar() const
kono
parents:
diff changeset
1747 {
kono
parents:
diff changeset
1748 return elem(length() - 1);
kono
parents:
diff changeset
1749 }
kono
parents:
diff changeset
1750
kono
parents:
diff changeset
1751 // searching
kono
parents:
diff changeset
1752
kono
parents:
diff changeset
1753 inline int String::index(char c, int startpos) const
kono
parents:
diff changeset
1754 {
kono
parents:
diff changeset
1755 return search(startpos, length(), c);
kono
parents:
diff changeset
1756 }
kono
parents:
diff changeset
1757
kono
parents:
diff changeset
1758 inline int String::index(const char* t, int startpos) const
kono
parents:
diff changeset
1759 {
kono
parents:
diff changeset
1760 return search(startpos, length(), t);
kono
parents:
diff changeset
1761 }
kono
parents:
diff changeset
1762
kono
parents:
diff changeset
1763 inline int String::index(const String& y, int startpos) const
kono
parents:
diff changeset
1764 {
kono
parents:
diff changeset
1765 return search(startpos, length(), y.chars(), y.length());
kono
parents:
diff changeset
1766 }
kono
parents:
diff changeset
1767
kono
parents:
diff changeset
1768 inline int String::index(const SubString& y, int startpos) const
kono
parents:
diff changeset
1769 {
kono
parents:
diff changeset
1770 return search(startpos, length(), y.chars(), y.length());
kono
parents:
diff changeset
1771 }
kono
parents:
diff changeset
1772
kono
parents:
diff changeset
1773 inline int String::index(const Regex& r, int startpos) const
kono
parents:
diff changeset
1774 {
kono
parents:
diff changeset
1775 int unused; return r.search(chars(), length(), unused, startpos);
kono
parents:
diff changeset
1776 }
kono
parents:
diff changeset
1777
kono
parents:
diff changeset
1778 inline int String::contains(char c) const
kono
parents:
diff changeset
1779 {
kono
parents:
diff changeset
1780 return search(0, length(), c) >= 0;
kono
parents:
diff changeset
1781 }
kono
parents:
diff changeset
1782
kono
parents:
diff changeset
1783 inline int String::contains(const char* t) const
kono
parents:
diff changeset
1784 {
kono
parents:
diff changeset
1785 return search(0, length(), t) >= 0;
kono
parents:
diff changeset
1786 }
kono
parents:
diff changeset
1787
kono
parents:
diff changeset
1788 inline int String::contains(const String& y) const
kono
parents:
diff changeset
1789 {
kono
parents:
diff changeset
1790 return search(0, length(), y.chars(), y.length()) >= 0;
kono
parents:
diff changeset
1791 }
kono
parents:
diff changeset
1792
kono
parents:
diff changeset
1793 inline int String::contains(const SubString& y) const
kono
parents:
diff changeset
1794 {
kono
parents:
diff changeset
1795 return search(0, length(), y.chars(), y.length()) >= 0;
kono
parents:
diff changeset
1796 }
kono
parents:
diff changeset
1797
kono
parents:
diff changeset
1798 inline int String::contains(char c, int p) const
kono
parents:
diff changeset
1799 {
kono
parents:
diff changeset
1800 return match(p, length(), 0, &c, 1) >= 0;
kono
parents:
diff changeset
1801 }
kono
parents:
diff changeset
1802
kono
parents:
diff changeset
1803 inline int String::contains(const char* t, int p) const
kono
parents:
diff changeset
1804 {
kono
parents:
diff changeset
1805 return match(p, length(), 0, t) >= 0;
kono
parents:
diff changeset
1806 }
kono
parents:
diff changeset
1807
kono
parents:
diff changeset
1808 inline int String::contains(const String& y, int p) const
kono
parents:
diff changeset
1809 {
kono
parents:
diff changeset
1810 return match(p, length(), 0, y.chars(), y.length()) >= 0;
kono
parents:
diff changeset
1811 }
kono
parents:
diff changeset
1812
kono
parents:
diff changeset
1813 inline int String::contains(const SubString& y, int p) const
kono
parents:
diff changeset
1814 {
kono
parents:
diff changeset
1815 return match(p, length(), 0, y.chars(), y.length()) >= 0;
kono
parents:
diff changeset
1816 }
kono
parents:
diff changeset
1817
kono
parents:
diff changeset
1818 inline int String::contains(const Regex& r) const
kono
parents:
diff changeset
1819 {
kono
parents:
diff changeset
1820 int unused; return r.search(chars(), length(), unused, 0) >= 0;
kono
parents:
diff changeset
1821 }
kono
parents:
diff changeset
1822
kono
parents:
diff changeset
1823 inline int String::contains(const Regex& r, int p) const
kono
parents:
diff changeset
1824 {
kono
parents:
diff changeset
1825 return r.match(chars(), length(), p) >= 0;
kono
parents:
diff changeset
1826 }
kono
parents:
diff changeset
1827
kono
parents:
diff changeset
1828
kono
parents:
diff changeset
1829 inline int String::matches(const SubString& y, int p) const
kono
parents:
diff changeset
1830 {
kono
parents:
diff changeset
1831 return match(p, length(), 1, y.chars(), y.length()) >= 0;
kono
parents:
diff changeset
1832 }
kono
parents:
diff changeset
1833
kono
parents:
diff changeset
1834 inline int String::matches(const String& y, int p) const
kono
parents:
diff changeset
1835 {
kono
parents:
diff changeset
1836 return match(p, length(), 1, y.chars(), y.length()) >= 0;
kono
parents:
diff changeset
1837 }
kono
parents:
diff changeset
1838
kono
parents:
diff changeset
1839 inline int String::matches(const char* t, int p) const
kono
parents:
diff changeset
1840 {
kono
parents:
diff changeset
1841 return match(p, length(), 1, t) >= 0;
kono
parents:
diff changeset
1842 }
kono
parents:
diff changeset
1843
kono
parents:
diff changeset
1844 inline int String::matches(char c, int p) const
kono
parents:
diff changeset
1845 {
kono
parents:
diff changeset
1846 return match(p, length(), 1, &c, 1) >= 0;
kono
parents:
diff changeset
1847 }
kono
parents:
diff changeset
1848
kono
parents:
diff changeset
1849 inline int String::matches(const Regex& r, int p) const
kono
parents:
diff changeset
1850 {
kono
parents:
diff changeset
1851 int l = (p < 0)? -p : length() - p;
kono
parents:
diff changeset
1852 return r.match(chars(), length(), p) == l;
kono
parents:
diff changeset
1853 }
kono
parents:
diff changeset
1854
kono
parents:
diff changeset
1855
kono
parents:
diff changeset
1856 inline int SubString::contains(const char* t) const
kono
parents:
diff changeset
1857 {
kono
parents:
diff changeset
1858 return S.search(pos, pos+len, t) >= 0;
kono
parents:
diff changeset
1859 }
kono
parents:
diff changeset
1860
kono
parents:
diff changeset
1861 inline int SubString::contains(const String& y) const
kono
parents:
diff changeset
1862 {
kono
parents:
diff changeset
1863 return S.search(pos, pos+len, y.chars(), y.length()) >= 0;
kono
parents:
diff changeset
1864 }
kono
parents:
diff changeset
1865
kono
parents:
diff changeset
1866 inline int SubString::contains(const SubString& y) const
kono
parents:
diff changeset
1867 {
kono
parents:
diff changeset
1868 return S.search(pos, pos+len, y.chars(), y.length()) >= 0;
kono
parents:
diff changeset
1869 }
kono
parents:
diff changeset
1870
kono
parents:
diff changeset
1871 inline int SubString::contains(char c) const
kono
parents:
diff changeset
1872 {
kono
parents:
diff changeset
1873 return S.search(pos, pos+len, 0, c) >= 0;
kono
parents:
diff changeset
1874 }
kono
parents:
diff changeset
1875
kono
parents:
diff changeset
1876 inline int SubString::contains(const Regex& r) const
kono
parents:
diff changeset
1877 {
kono
parents:
diff changeset
1878 int unused; return r.search(chars(), len, unused, 0) >= 0;
kono
parents:
diff changeset
1879 }
kono
parents:
diff changeset
1880
kono
parents:
diff changeset
1881 inline int SubString::matches(const Regex& r) const
kono
parents:
diff changeset
1882 {
kono
parents:
diff changeset
1883 return r.match(chars(), len, 0) == len;
kono
parents:
diff changeset
1884 }
kono
parents:
diff changeset
1885
kono
parents:
diff changeset
1886
kono
parents:
diff changeset
1887 inline int String::gsub(const String& pat, const String& r)
kono
parents:
diff changeset
1888 {
kono
parents:
diff changeset
1889 return _gsub(pat.chars(), pat.length(), r.chars(), r.length());
kono
parents:
diff changeset
1890 }
kono
parents:
diff changeset
1891
kono
parents:
diff changeset
1892 inline int String::gsub(const SubString& pat, const String& r)
kono
parents:
diff changeset
1893 {
kono
parents:
diff changeset
1894 return _gsub(pat.chars(), pat.length(), r.chars(), r.length());
kono
parents:
diff changeset
1895 }
kono
parents:
diff changeset
1896
kono
parents:
diff changeset
1897 inline int String::gsub(const Regex& pat, const String& r)
kono
parents:
diff changeset
1898 {
kono
parents:
diff changeset
1899 return _gsub(pat, r.chars(), r.length());
kono
parents:
diff changeset
1900 }
kono
parents:
diff changeset
1901
kono
parents:
diff changeset
1902 inline int String::gsub(const char* pat, const String& r)
kono
parents:
diff changeset
1903 {
kono
parents:
diff changeset
1904 return _gsub(pat, -1, r.chars(), r.length());
kono
parents:
diff changeset
1905 }
kono
parents:
diff changeset
1906
kono
parents:
diff changeset
1907 inline int String::gsub(const char* pat, const char* r)
kono
parents:
diff changeset
1908 {
kono
parents:
diff changeset
1909 return _gsub(pat, -1, r, -1);
kono
parents:
diff changeset
1910 }
kono
parents:
diff changeset
1911
kono
parents:
diff changeset
1912
kono
parents:
diff changeset
1913
kono
parents:
diff changeset
1914 inline ostream& operator<<(ostream& s, const String& x)
kono
parents:
diff changeset
1915 {
kono
parents:
diff changeset
1916 s << x.chars(); return s;
kono
parents:
diff changeset
1917 }
kono
parents:
diff changeset
1918
kono
parents:
diff changeset
1919 // a zillion comparison operators
kono
parents:
diff changeset
1920
kono
parents:
diff changeset
1921 inline int operator==(const String& x, const String& y)
kono
parents:
diff changeset
1922 {
kono
parents:
diff changeset
1923 return compare(x, y) == 0;
kono
parents:
diff changeset
1924 }
kono
parents:
diff changeset
1925
kono
parents:
diff changeset
1926 inline int operator!=(const String& x, const String& y)
kono
parents:
diff changeset
1927 {
kono
parents:
diff changeset
1928 return compare(x, y) != 0;
kono
parents:
diff changeset
1929 }
kono
parents:
diff changeset
1930
kono
parents:
diff changeset
1931 inline int operator>(const String& x, const String& y)
kono
parents:
diff changeset
1932 {
kono
parents:
diff changeset
1933 return compare(x, y) > 0;
kono
parents:
diff changeset
1934 }
kono
parents:
diff changeset
1935
kono
parents:
diff changeset
1936 inline int operator>=(const String& x, const String& y)
kono
parents:
diff changeset
1937 {
kono
parents:
diff changeset
1938 return compare(x, y) >= 0;
kono
parents:
diff changeset
1939 }
kono
parents:
diff changeset
1940
kono
parents:
diff changeset
1941 inline int operator<(const String& x, const String& y)
kono
parents:
diff changeset
1942 {
kono
parents:
diff changeset
1943 return compare(x, y) < 0;
kono
parents:
diff changeset
1944 }
kono
parents:
diff changeset
1945
kono
parents:
diff changeset
1946 inline int operator<=(const String& x, const String& y)
kono
parents:
diff changeset
1947 {
kono
parents:
diff changeset
1948 return compare(x, y) <= 0;
kono
parents:
diff changeset
1949 }
kono
parents:
diff changeset
1950
kono
parents:
diff changeset
1951 inline int operator==(const String& x, const SubString& y)
kono
parents:
diff changeset
1952 {
kono
parents:
diff changeset
1953 return compare(x, y) == 0;
kono
parents:
diff changeset
1954 }
kono
parents:
diff changeset
1955
kono
parents:
diff changeset
1956 inline int operator!=(const String& x, const SubString& y)
kono
parents:
diff changeset
1957 {
kono
parents:
diff changeset
1958 return compare(x, y) != 0;
kono
parents:
diff changeset
1959 }
kono
parents:
diff changeset
1960
kono
parents:
diff changeset
1961 inline int operator>(const String& x, const SubString& y)
kono
parents:
diff changeset
1962 {
kono
parents:
diff changeset
1963 return compare(x, y) > 0;
kono
parents:
diff changeset
1964 }
kono
parents:
diff changeset
1965
kono
parents:
diff changeset
1966 inline int operator>=(const String& x, const SubString& y)
kono
parents:
diff changeset
1967 {
kono
parents:
diff changeset
1968 return compare(x, y) >= 0;
kono
parents:
diff changeset
1969 }
kono
parents:
diff changeset
1970
kono
parents:
diff changeset
1971 inline int operator<(const String& x, const SubString& y)
kono
parents:
diff changeset
1972 {
kono
parents:
diff changeset
1973 return compare(x, y) < 0;
kono
parents:
diff changeset
1974 }
kono
parents:
diff changeset
1975
kono
parents:
diff changeset
1976 inline int operator<=(const String& x, const SubString& y)
kono
parents:
diff changeset
1977 {
kono
parents:
diff changeset
1978 return compare(x, y) <= 0;
kono
parents:
diff changeset
1979 }
kono
parents:
diff changeset
1980
kono
parents:
diff changeset
1981 inline int operator==(const String& x, const char* t)
kono
parents:
diff changeset
1982 {
kono
parents:
diff changeset
1983 return compare(x, t) == 0;
kono
parents:
diff changeset
1984 }
kono
parents:
diff changeset
1985
kono
parents:
diff changeset
1986 inline int operator!=(const String& x, const char* t)
kono
parents:
diff changeset
1987 {
kono
parents:
diff changeset
1988 return compare(x, t) != 0;
kono
parents:
diff changeset
1989 }
kono
parents:
diff changeset
1990
kono
parents:
diff changeset
1991 inline int operator>(const String& x, const char* t)
kono
parents:
diff changeset
1992 {
kono
parents:
diff changeset
1993 return compare(x, t) > 0;
kono
parents:
diff changeset
1994 }
kono
parents:
diff changeset
1995
kono
parents:
diff changeset
1996 inline int operator>=(const String& x, const char* t)
kono
parents:
diff changeset
1997 {
kono
parents:
diff changeset
1998 return compare(x, t) >= 0;
kono
parents:
diff changeset
1999 }
kono
parents:
diff changeset
2000
kono
parents:
diff changeset
2001 inline int operator<(const String& x, const char* t)
kono
parents:
diff changeset
2002 {
kono
parents:
diff changeset
2003 return compare(x, t) < 0;
kono
parents:
diff changeset
2004 }
kono
parents:
diff changeset
2005
kono
parents:
diff changeset
2006 inline int operator<=(const String& x, const char* t)
kono
parents:
diff changeset
2007 {
kono
parents:
diff changeset
2008 return compare(x, t) <= 0;
kono
parents:
diff changeset
2009 }
kono
parents:
diff changeset
2010
kono
parents:
diff changeset
2011 inline int operator==(const SubString& x, const String& y)
kono
parents:
diff changeset
2012 {
kono
parents:
diff changeset
2013 return compare(y, x) == 0;
kono
parents:
diff changeset
2014 }
kono
parents:
diff changeset
2015
kono
parents:
diff changeset
2016 inline int operator!=(const SubString& x, const String& y)
kono
parents:
diff changeset
2017 {
kono
parents:
diff changeset
2018 return compare(y, x) != 0;
kono
parents:
diff changeset
2019 }
kono
parents:
diff changeset
2020
kono
parents:
diff changeset
2021 inline int operator>(const SubString& x, const String& y)
kono
parents:
diff changeset
2022 {
kono
parents:
diff changeset
2023 return compare(y, x) < 0;
kono
parents:
diff changeset
2024 }
kono
parents:
diff changeset
2025
kono
parents:
diff changeset
2026 inline int operator>=(const SubString& x, const String& y)
kono
parents:
diff changeset
2027 {
kono
parents:
diff changeset
2028 return compare(y, x) <= 0;
kono
parents:
diff changeset
2029 }
kono
parents:
diff changeset
2030
kono
parents:
diff changeset
2031 inline int operator<(const SubString& x, const String& y)
kono
parents:
diff changeset
2032 {
kono
parents:
diff changeset
2033 return compare(y, x) > 0;
kono
parents:
diff changeset
2034 }
kono
parents:
diff changeset
2035
kono
parents:
diff changeset
2036 inline int operator<=(const SubString& x, const String& y)
kono
parents:
diff changeset
2037 {
kono
parents:
diff changeset
2038 return compare(y, x) >= 0;
kono
parents:
diff changeset
2039 }
kono
parents:
diff changeset
2040
kono
parents:
diff changeset
2041 inline int operator==(const SubString& x, const SubString& y)
kono
parents:
diff changeset
2042 {
kono
parents:
diff changeset
2043 return compare(x, y) == 0;
kono
parents:
diff changeset
2044 }
kono
parents:
diff changeset
2045
kono
parents:
diff changeset
2046 inline int operator!=(const SubString& x, const SubString& y)
kono
parents:
diff changeset
2047 {
kono
parents:
diff changeset
2048 return compare(x, y) != 0;
kono
parents:
diff changeset
2049 }
kono
parents:
diff changeset
2050
kono
parents:
diff changeset
2051 inline int operator>(const SubString& x, const SubString& y)
kono
parents:
diff changeset
2052 {
kono
parents:
diff changeset
2053 return compare(x, y) > 0;
kono
parents:
diff changeset
2054 }
kono
parents:
diff changeset
2055
kono
parents:
diff changeset
2056 inline int operator>=(const SubString& x, const SubString& y)
kono
parents:
diff changeset
2057 {
kono
parents:
diff changeset
2058 return compare(x, y) >= 0;
kono
parents:
diff changeset
2059 }
kono
parents:
diff changeset
2060
kono
parents:
diff changeset
2061 inline int operator<(const SubString& x, const SubString& y)
kono
parents:
diff changeset
2062 {
kono
parents:
diff changeset
2063 return compare(x, y) < 0;
kono
parents:
diff changeset
2064 }
kono
parents:
diff changeset
2065
kono
parents:
diff changeset
2066 inline int operator<=(const SubString& x, const SubString& y)
kono
parents:
diff changeset
2067 {
kono
parents:
diff changeset
2068 return compare(x, y) <= 0;
kono
parents:
diff changeset
2069 }
kono
parents:
diff changeset
2070
kono
parents:
diff changeset
2071 inline int operator==(const SubString& x, const char* t)
kono
parents:
diff changeset
2072 {
kono
parents:
diff changeset
2073 return compare(x, t) == 0;
kono
parents:
diff changeset
2074 }
kono
parents:
diff changeset
2075
kono
parents:
diff changeset
2076 inline int operator!=(const SubString& x, const char* t)
kono
parents:
diff changeset
2077 {
kono
parents:
diff changeset
2078 return compare(x, t) != 0;
kono
parents:
diff changeset
2079 }
kono
parents:
diff changeset
2080
kono
parents:
diff changeset
2081 inline int operator>(const SubString& x, const char* t)
kono
parents:
diff changeset
2082 {
kono
parents:
diff changeset
2083 return compare(x, t) > 0;
kono
parents:
diff changeset
2084 }
kono
parents:
diff changeset
2085
kono
parents:
diff changeset
2086 inline int operator>=(const SubString& x, const char* t)
kono
parents:
diff changeset
2087 {
kono
parents:
diff changeset
2088 return compare(x, t) >= 0;
kono
parents:
diff changeset
2089 }
kono
parents:
diff changeset
2090
kono
parents:
diff changeset
2091 inline int operator<(const SubString& x, const char* t)
kono
parents:
diff changeset
2092 {
kono
parents:
diff changeset
2093 return compare(x, t) < 0;
kono
parents:
diff changeset
2094 }
kono
parents:
diff changeset
2095
kono
parents:
diff changeset
2096 inline int operator<=(const SubString& x, const char* t)
kono
parents:
diff changeset
2097 {
kono
parents:
diff changeset
2098 return compare(x, t) <= 0;
kono
parents:
diff changeset
2099 }
kono
parents:
diff changeset
2100
kono
parents:
diff changeset
2101
kono
parents:
diff changeset
2102 // a helper needed by at, before, etc.
kono
parents:
diff changeset
2103
kono
parents:
diff changeset
2104 inline SubString String::_substr(int first, int l)
kono
parents:
diff changeset
2105 {
kono
parents:
diff changeset
2106 if (first >= length() ) // ??? THIS LINE IS QUESTIONABLE
kono
parents:
diff changeset
2107 return SubString(_nilString, 0, 0) ;
kono
parents:
diff changeset
2108 else
kono
parents:
diff changeset
2109 return SubString(*this, first, l);
kono
parents:
diff changeset
2110 }
kono
parents:
diff changeset
2111
kono
parents:
diff changeset
2112
kono
parents:
diff changeset
2113
kono
parents:
diff changeset
2114
kono
parents:
diff changeset
2115
kono
parents:
diff changeset
2116 //# 26 "../../GctSymbol.h" 2
kono
parents:
diff changeset
2117
kono
parents:
diff changeset
2118
kono
parents:
diff changeset
2119 //# 1 "../../../../../../mips/include/Gct/Object/GctHashObject.h" 1
kono
parents:
diff changeset
2120 // -*- C++ -*-
kono
parents:
diff changeset
2121
kono
parents:
diff changeset
2122
kono
parents:
diff changeset
2123
kono
parents:
diff changeset
2124 //
kono
parents:
diff changeset
2125 // GctHashObject class (is abstract)
kono
parents:
diff changeset
2126 //
kono
parents:
diff changeset
2127 // Expects to be included by Object.h or where needed explicitly.
kono
parents:
diff changeset
2128 //
kono
parents:
diff changeset
2129 // Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU)
kono
parents:
diff changeset
2130 //
kono
parents:
diff changeset
2131
kono
parents:
diff changeset
2132
kono
parents:
diff changeset
2133
kono
parents:
diff changeset
2134
kono
parents:
diff changeset
2135
kono
parents:
diff changeset
2136 //#pragma interface
kono
parents:
diff changeset
2137
kono
parents:
diff changeset
2138
kono
parents:
diff changeset
2139
kono
parents:
diff changeset
2140 //# 1 "../../../../../../mips/include/Gct/Object/GctObject.h" 1
kono
parents:
diff changeset
2141 // -*- C++ -*-
kono
parents:
diff changeset
2142
kono
parents:
diff changeset
2143
kono
parents:
diff changeset
2144
kono
parents:
diff changeset
2145 //
kono
parents:
diff changeset
2146 // GctObject class (is abstract)
kono
parents:
diff changeset
2147 //
kono
parents:
diff changeset
2148 // Expects to be included by Object.h or where needed explicitly.
kono
parents:
diff changeset
2149 //
kono
parents:
diff changeset
2150 // Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU)
kono
parents:
diff changeset
2151 //
kono
parents:
diff changeset
2152
kono
parents:
diff changeset
2153
kono
parents:
diff changeset
2154
kono
parents:
diff changeset
2155
kono
parents:
diff changeset
2156
kono
parents:
diff changeset
2157 //#pragma interface
kono
parents:
diff changeset
2158
kono
parents:
diff changeset
2159
kono
parents:
diff changeset
2160
kono
parents:
diff changeset
2161 //# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1
kono
parents:
diff changeset
2162 // -*- C++ -*-
kono
parents:
diff changeset
2163
kono
parents:
diff changeset
2164
kono
parents:
diff changeset
2165
kono
parents:
diff changeset
2166 //
kono
parents:
diff changeset
2167 // tostrstream class
kono
parents:
diff changeset
2168 //
kono
parents:
diff changeset
2169 // A terminated oststream - an ostsrstream that auto-terminates on str()
kono
parents:
diff changeset
2170 //
kono
parents:
diff changeset
2171 // Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU)
kono
parents:
diff changeset
2172 //
kono
parents:
diff changeset
2173
kono
parents:
diff changeset
2174
kono
parents:
diff changeset
2175
kono
parents:
diff changeset
2176
kono
parents:
diff changeset
2177
kono
parents:
diff changeset
2178 //#pragma interface
kono
parents:
diff changeset
2179
kono
parents:
diff changeset
2180
kono
parents:
diff changeset
2181
kono
parents:
diff changeset
2182 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/strstream.h" 1
kono
parents:
diff changeset
2183 // This is part of the iostream library, providing input/output for C++.
kono
parents:
diff changeset
2184 // Copyright (C) 1991 Per Bothner.
kono
parents:
diff changeset
2185 //
kono
parents:
diff changeset
2186 // This library is free software; you can redistribute it and/or
kono
parents:
diff changeset
2187 // modify it under the terms of the GNU Library General Public
kono
parents:
diff changeset
2188 // License as published by the Free Software Foundation; either
kono
parents:
diff changeset
2189 // version 2 of the License, or (at your option) any later version.
kono
parents:
diff changeset
2190 //
kono
parents:
diff changeset
2191 // This library is distributed in the hope that it will be useful,
kono
parents:
diff changeset
2192 // but WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
2193 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
kono
parents:
diff changeset
2194 // Library General Public License for more details.
kono
parents:
diff changeset
2195 //
kono
parents:
diff changeset
2196 // You should have received a copy of the GNU Library General Public
kono
parents:
diff changeset
2197 // License along with this library; if not, write to the Free
kono
parents:
diff changeset
2198 // Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
kono
parents:
diff changeset
2199
kono
parents:
diff changeset
2200
kono
parents:
diff changeset
2201
kono
parents:
diff changeset
2202
kono
parents:
diff changeset
2203 //#pragma interface
kono
parents:
diff changeset
2204
kono
parents:
diff changeset
2205 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1
kono
parents:
diff changeset
2206 // This is part of the iostream library, providing -*- C++ -*- input/output.
kono
parents:
diff changeset
2207 // Copyright (C) 1991 Per Bothner.
kono
parents:
diff changeset
2208 //
kono
parents:
diff changeset
2209 // This library is free software; you can redistribute it and/or
kono
parents:
diff changeset
2210 // modify it under the terms of the GNU Library General Public
kono
parents:
diff changeset
2211 // License as published by the Free Software Foundation; either
kono
parents:
diff changeset
2212 // version 2 of the License, or (at your option) any later version.
kono
parents:
diff changeset
2213 //
kono
parents:
diff changeset
2214 // This library is distributed in the hope that it will be useful,
kono
parents:
diff changeset
2215 // but WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
2216 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
kono
parents:
diff changeset
2217 // Library General Public License for more details.
kono
parents:
diff changeset
2218 //
kono
parents:
diff changeset
2219 // You should have received a copy of the GNU Library General Public
kono
parents:
diff changeset
2220 // License along with this library; if not, write to the Free
kono
parents:
diff changeset
2221 // Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
kono
parents:
diff changeset
2222
kono
parents:
diff changeset
2223 //# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h"
kono
parents:
diff changeset
2224
kono
parents:
diff changeset
2225 //# 23 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/strstream.h" 2
kono
parents:
diff changeset
2226
kono
parents:
diff changeset
2227
kono
parents:
diff changeset
2228 class strstreambuf : public streambuf {
kono
parents:
diff changeset
2229 size_t *lenp; /* current (logical) length (i.e. valid data bytes) */
kono
parents:
diff changeset
2230 size_t *sizep; /* allocated (physical) buffer size */
kono
parents:
diff changeset
2231 char **bufp;
kono
parents:
diff changeset
2232 size_t _len;
kono
parents:
diff changeset
2233 size_t _size;
kono
parents:
diff changeset
2234 char *buf;
kono
parents:
diff changeset
2235 int _frozen;
kono
parents:
diff changeset
2236 protected:
kono
parents:
diff changeset
2237 virtual int overflow(int = (-1) );
kono
parents:
diff changeset
2238 public:
kono
parents:
diff changeset
2239 strstreambuf();
kono
parents:
diff changeset
2240 strstreambuf(int initial);
kono
parents:
diff changeset
2241 strstreambuf(char *ptr, int size, char *pstart = (__null) );
kono
parents:
diff changeset
2242 ~strstreambuf();
kono
parents:
diff changeset
2243 int frozen() { return _frozen; }
kono
parents:
diff changeset
2244 void freeze(int n=1) { _frozen = n != 0; }
kono
parents:
diff changeset
2245 size_t pcount();
kono
parents:
diff changeset
2246 char *str();
kono
parents:
diff changeset
2247 };
kono
parents:
diff changeset
2248
kono
parents:
diff changeset
2249 class istrstream : public istream {
kono
parents:
diff changeset
2250 public:
kono
parents:
diff changeset
2251 istrstream(char*);
kono
parents:
diff changeset
2252 istrstream(char*, int);
kono
parents:
diff changeset
2253 strstreambuf* rdbuf() { return (strstreambuf*)_strbuf; }
kono
parents:
diff changeset
2254 };
kono
parents:
diff changeset
2255
kono
parents:
diff changeset
2256 class ostrstream : public ostream {
kono
parents:
diff changeset
2257 public:
kono
parents:
diff changeset
2258 ostrstream();
kono
parents:
diff changeset
2259 ostrstream(char *cp, int n, int mode=ios::out);
kono
parents:
diff changeset
2260 size_t pcount() { return ((strstreambuf*)_strbuf)->pcount(); }
kono
parents:
diff changeset
2261 char *str() { return ((strstreambuf*)_strbuf)->str(); }
kono
parents:
diff changeset
2262 void freeze(int n = 1) { ((strstreambuf*)_strbuf)->freeze(n); }
kono
parents:
diff changeset
2263 int frozen() { return ((strstreambuf*)_strbuf)->frozen(); }
kono
parents:
diff changeset
2264 strstreambuf* rdbuf() { return (strstreambuf*)_strbuf; }
kono
parents:
diff changeset
2265 };
kono
parents:
diff changeset
2266
kono
parents:
diff changeset
2267
kono
parents:
diff changeset
2268 //# 25 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 2
kono
parents:
diff changeset
2269
kono
parents:
diff changeset
2270
kono
parents:
diff changeset
2271 //
kono
parents:
diff changeset
2272 // tostrstream class
kono
parents:
diff changeset
2273 //
kono
parents:
diff changeset
2274 // An isteam class that doesn't have that nasty skipws parameter that
kono
parents:
diff changeset
2275 // you have to remember to set. This class simply provides the istream
kono
parents:
diff changeset
2276 // functionality with a set of constructors which defaults skipws to
kono
parents:
diff changeset
2277 // FALSE (instead of defaulting to TRUE as is the case with plain istream).
kono
parents:
diff changeset
2278 //
kono
parents:
diff changeset
2279 class tostrstream: public ostrstream {
kono
parents:
diff changeset
2280 public:
kono
parents:
diff changeset
2281 tostrstream(): ostrstream()
kono
parents:
diff changeset
2282 { }
kono
parents:
diff changeset
2283 // This constructor defines cp as the buffer to use for the
kono
parents:
diff changeset
2284 // stream (instead of one of its own devising); it does NOT
kono
parents:
diff changeset
2285 // initialize the ostrstream to contain cp (of length n).
kono
parents:
diff changeset
2286 tostrstream(char *cp, int n, int mode=ios::out): ostrtream(cp, n, mode) // { dg-error "" }
kono
parents:
diff changeset
2287 { }
kono
parents:
diff changeset
2288 char *str()
kono
parents:
diff changeset
2289 {
kono
parents:
diff changeset
2290 char *s = ostrstream::str();
kono
parents:
diff changeset
2291 s[ostrstream::pcount()] = '\0';
kono
parents:
diff changeset
2292 return s;
kono
parents:
diff changeset
2293 }
kono
parents:
diff changeset
2294 };
kono
parents:
diff changeset
2295
kono
parents:
diff changeset
2296
kono
parents:
diff changeset
2297 //# 25 "../../../../../../mips/include/Gct/Object/GctObject.h" 2
kono
parents:
diff changeset
2298
kono
parents:
diff changeset
2299
kono
parents:
diff changeset
2300 //# 1 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 1
kono
parents:
diff changeset
2301 // -*- C++ -*-
kono
parents:
diff changeset
2302
kono
parents:
diff changeset
2303
kono
parents:
diff changeset
2304
kono
parents:
diff changeset
2305 //
kono
parents:
diff changeset
2306 // GttObject class (is abstract)
kono
parents:
diff changeset
2307 //
kono
parents:
diff changeset
2308 // Expects to be included where needed explicitly.
kono
parents:
diff changeset
2309 //
kono
parents:
diff changeset
2310 // Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU)
kono
parents:
diff changeset
2311 //
kono
parents:
diff changeset
2312
kono
parents:
diff changeset
2313
kono
parents:
diff changeset
2314
kono
parents:
diff changeset
2315
kono
parents:
diff changeset
2316
kono
parents:
diff changeset
2317 //#pragma interface
kono
parents:
diff changeset
2318
kono
parents:
diff changeset
2319
kono
parents:
diff changeset
2320
kono
parents:
diff changeset
2321 //# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1
kono
parents:
diff changeset
2322 // -*- C++ -*-
kono
parents:
diff changeset
2323 //# 52 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h"
kono
parents:
diff changeset
2324
kono
parents:
diff changeset
2325 //# 25 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 2
kono
parents:
diff changeset
2326
kono
parents:
diff changeset
2327
kono
parents:
diff changeset
2328 //# 1 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 1
kono
parents:
diff changeset
2329 // -*- C++ -*-
kono
parents:
diff changeset
2330
kono
parents:
diff changeset
2331
kono
parents:
diff changeset
2332
kono
parents:
diff changeset
2333 //
kono
parents:
diff changeset
2334 // GttErrorHandler class
kono
parents:
diff changeset
2335 //
kono
parents:
diff changeset
2336 // Expects to be included by Gtt.h
kono
parents:
diff changeset
2337 //
kono
parents:
diff changeset
2338 // Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU)
kono
parents:
diff changeset
2339 //
kono
parents:
diff changeset
2340
kono
parents:
diff changeset
2341
kono
parents:
diff changeset
2342
kono
parents:
diff changeset
2343
kono
parents:
diff changeset
2344
kono
parents:
diff changeset
2345 //#pragma interface
kono
parents:
diff changeset
2346
kono
parents:
diff changeset
2347
kono
parents:
diff changeset
2348
kono
parents:
diff changeset
2349 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1
kono
parents:
diff changeset
2350
kono
parents:
diff changeset
2351
kono
parents:
diff changeset
2352
kono
parents:
diff changeset
2353
kono
parents:
diff changeset
2354
kono
parents:
diff changeset
2355
kono
parents:
diff changeset
2356
kono
parents:
diff changeset
2357 //# 25 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 2
kono
parents:
diff changeset
2358
kono
parents:
diff changeset
2359
kono
parents:
diff changeset
2360 //# 1 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 1
kono
parents:
diff changeset
2361 // -*- C++ -*-
kono
parents:
diff changeset
2362
kono
parents:
diff changeset
2363
kono
parents:
diff changeset
2364
kono
parents:
diff changeset
2365 //
kono
parents:
diff changeset
2366 // Fake up a libstuff++
kono
parents:
diff changeset
2367 //
kono
parents:
diff changeset
2368 // This is done as a complete and utter hack; this library has no function
kono
parents:
diff changeset
2369 // at all being in the boot area; it is here solely in order to provide a
kono
parents:
diff changeset
2370 // libstuff++ against which the Makefiles can resolve link lines.
kono
parents:
diff changeset
2371 //
kono
parents:
diff changeset
2372 // The only reason that this is done is to allow the STANDARD_C++_LIBRARIES
kono
parents:
diff changeset
2373 // as provided by the Makefile templates in the boot area to be the same
kono
parents:
diff changeset
2374 // ones that are used by the tools outside this hierarchy.
kono
parents:
diff changeset
2375 //
kono
parents:
diff changeset
2376 // The tools outside this hierarchy use a different libstuff++; one that is
kono
parents:
diff changeset
2377 // written in C++. This one is not written in C++ in order to be simpler.
kono
parents:
diff changeset
2378 //
kono
parents:
diff changeset
2379
kono
parents:
diff changeset
2380
kono
parents:
diff changeset
2381
kono
parents:
diff changeset
2382
kono
parents:
diff changeset
2383
kono
parents:
diff changeset
2384 //#pragma interface
kono
parents:
diff changeset
2385
kono
parents:
diff changeset
2386
kono
parents:
diff changeset
2387
kono
parents:
diff changeset
2388 extern "C" {
kono
parents:
diff changeset
2389 //# 1 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" 1
kono
parents:
diff changeset
2390
kono
parents:
diff changeset
2391
kono
parents:
diff changeset
2392
kono
parents:
diff changeset
2393 /*
kono
parents:
diff changeset
2394 * Useful stuff
kono
parents:
diff changeset
2395 */
kono
parents:
diff changeset
2396
kono
parents:
diff changeset
2397 /*
kono
parents:
diff changeset
2398 */
kono
parents:
diff changeset
2399
kono
parents:
diff changeset
2400 //# 1 "/sandbox/wbaker/wbaker0/source/mips/include/ansi.h" 1
kono
parents:
diff changeset
2401
kono
parents:
diff changeset
2402
kono
parents:
diff changeset
2403
kono
parents:
diff changeset
2404
kono
parents:
diff changeset
2405 /*
kono
parents:
diff changeset
2406 * ANSI Compiler Support
kono
parents:
diff changeset
2407 *
kono
parents:
diff changeset
2408 * David Harrison
kono
parents:
diff changeset
2409 * University of California, Berkeley
kono
parents:
diff changeset
2410 * 1988
kono
parents:
diff changeset
2411 *
kono
parents:
diff changeset
2412 * ANSI compatible compilers are supposed to define the preprocessor
kono
parents:
diff changeset
2413 * directive __STDC__. Based on this directive, this file defines
kono
parents:
diff changeset
2414 * certain ANSI specific macros.
kono
parents:
diff changeset
2415 *
kono
parents:
diff changeset
2416 * ARGS:
kono
parents:
diff changeset
2417 * Used in function prototypes. Example:
kono
parents:
diff changeset
2418 * extern int foo
kono
parents:
diff changeset
2419 * ARGS((char *blah, double threshold));
kono
parents:
diff changeset
2420 */
kono
parents:
diff changeset
2421
kono
parents:
diff changeset
2422 /*
kono
parents:
diff changeset
2423 *
kono
parents:
diff changeset
2424 * Modifications
kono
parents:
diff changeset
2425 * Wendell C Baker
kono
parents:
diff changeset
2426 * University of California, Berkeley
kono
parents:
diff changeset
2427 */
kono
parents:
diff changeset
2428
kono
parents:
diff changeset
2429 /* Function prototypes */
kono
parents:
diff changeset
2430
kono
parents:
diff changeset
2431
kono
parents:
diff changeset
2432
kono
parents:
diff changeset
2433
kono
parents:
diff changeset
2434
kono
parents:
diff changeset
2435
kono
parents:
diff changeset
2436
kono
parents:
diff changeset
2437
kono
parents:
diff changeset
2438
kono
parents:
diff changeset
2439
kono
parents:
diff changeset
2440
kono
parents:
diff changeset
2441
kono
parents:
diff changeset
2442
kono
parents:
diff changeset
2443
kono
parents:
diff changeset
2444
kono
parents:
diff changeset
2445
kono
parents:
diff changeset
2446
kono
parents:
diff changeset
2447
kono
parents:
diff changeset
2448
kono
parents:
diff changeset
2449
kono
parents:
diff changeset
2450
kono
parents:
diff changeset
2451
kono
parents:
diff changeset
2452
kono
parents:
diff changeset
2453
kono
parents:
diff changeset
2454
kono
parents:
diff changeset
2455
kono
parents:
diff changeset
2456
kono
parents:
diff changeset
2457 //# 15 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" 2
kono
parents:
diff changeset
2458
kono
parents:
diff changeset
2459
kono
parents:
diff changeset
2460
kono
parents:
diff changeset
2461 /*
kono
parents:
diff changeset
2462 * If g++, then we stub out part of this thing and let the C++ types take
kono
parents:
diff changeset
2463 * over and do the same job; some compatibility must be given however
kono
parents:
diff changeset
2464 */
kono
parents:
diff changeset
2465
kono
parents:
diff changeset
2466 /*
kono
parents:
diff changeset
2467 * Use the GNU libg++ definition
kono
parents:
diff changeset
2468 */
kono
parents:
diff changeset
2469 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1
kono
parents:
diff changeset
2470
kono
parents:
diff changeset
2471
kono
parents:
diff changeset
2472
kono
parents:
diff changeset
2473
kono
parents:
diff changeset
2474
kono
parents:
diff changeset
2475
kono
parents:
diff changeset
2476
kono
parents:
diff changeset
2477 //# 26 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" 2
kono
parents:
diff changeset
2478
kono
parents:
diff changeset
2479 //# 35 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h"
kono
parents:
diff changeset
2480
kono
parents:
diff changeset
2481
kono
parents:
diff changeset
2482 /*
kono
parents:
diff changeset
2483 * Make various pieces of C code that use the old ``Boolean''
kono
parents:
diff changeset
2484 * be compatible by faking up the definition of Boolean using
kono
parents:
diff changeset
2485 * the new bool type.
kono
parents:
diff changeset
2486 */
kono
parents:
diff changeset
2487
kono
parents:
diff changeset
2488
kono
parents:
diff changeset
2489 //# 58 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h"
kono
parents:
diff changeset
2490
kono
parents:
diff changeset
2491
kono
parents:
diff changeset
2492 typedef long FitAny; /* can fit any integral type */
kono
parents:
diff changeset
2493
kono
parents:
diff changeset
2494 /*
kono
parents:
diff changeset
2495 * typedef char *String; - DO NOT USE THIS - it conflicts with C++
kono
parents:
diff changeset
2496 * typedef char **Stringv; - just use char* and char** instead.
kono
parents:
diff changeset
2497 * - void* can be used for arbitrary pointers
kono
parents:
diff changeset
2498 */
kono
parents:
diff changeset
2499
kono
parents:
diff changeset
2500
kono
parents:
diff changeset
2501
kono
parents:
diff changeset
2502
kono
parents:
diff changeset
2503 extern int nocase_strcmp (char *, char *) ;
kono
parents:
diff changeset
2504 extern int nocase_strncmp (char *, char *, int) ;
kono
parents:
diff changeset
2505
kono
parents:
diff changeset
2506 extern bool nocase_strequal (char *, char *) ;
kono
parents:
diff changeset
2507 extern bool nocase_strnequal (char *, char *, int) ;
kono
parents:
diff changeset
2508
kono
parents:
diff changeset
2509 extern bool lead_strequal (char *, char *) ;
kono
parents:
diff changeset
2510 extern bool nocase_lead_strequal (char *, char *) ;
kono
parents:
diff changeset
2511
kono
parents:
diff changeset
2512 extern int strhash (char *, int) ;
kono
parents:
diff changeset
2513 extern int nocase_strhash (char *, int) ;
kono
parents:
diff changeset
2514
kono
parents:
diff changeset
2515 extern int sign (int) ;
kono
parents:
diff changeset
2516
kono
parents:
diff changeset
2517 /*
kono
parents:
diff changeset
2518 * Some useful macros.
kono
parents:
diff changeset
2519 */
kono
parents:
diff changeset
2520
kono
parents:
diff changeset
2521
kono
parents:
diff changeset
2522
kono
parents:
diff changeset
2523
kono
parents:
diff changeset
2524
kono
parents:
diff changeset
2525
kono
parents:
diff changeset
2526
kono
parents:
diff changeset
2527
kono
parents:
diff changeset
2528
kono
parents:
diff changeset
2529
kono
parents:
diff changeset
2530
kono
parents:
diff changeset
2531
kono
parents:
diff changeset
2532
kono
parents:
diff changeset
2533
kono
parents:
diff changeset
2534
kono
parents:
diff changeset
2535
kono
parents:
diff changeset
2536
kono
parents:
diff changeset
2537
kono
parents:
diff changeset
2538
kono
parents:
diff changeset
2539
kono
parents:
diff changeset
2540
kono
parents:
diff changeset
2541
kono
parents:
diff changeset
2542
kono
parents:
diff changeset
2543
kono
parents:
diff changeset
2544
kono
parents:
diff changeset
2545
kono
parents:
diff changeset
2546
kono
parents:
diff changeset
2547
kono
parents:
diff changeset
2548
kono
parents:
diff changeset
2549 //# 33 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2
kono
parents:
diff changeset
2550
kono
parents:
diff changeset
2551 }
kono
parents:
diff changeset
2552
kono
parents:
diff changeset
2553 //
kono
parents:
diff changeset
2554 // This is here because we wish to provide externs for the two
kono
parents:
diff changeset
2555 // functions btoa(bool, unsigned = 0) and operator<<(ostream&, bool)
kono
parents:
diff changeset
2556 // because they are not provided in bool.h.
kono
parents:
diff changeset
2557 //
kono
parents:
diff changeset
2558 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1
kono
parents:
diff changeset
2559
kono
parents:
diff changeset
2560
kono
parents:
diff changeset
2561
kono
parents:
diff changeset
2562
kono
parents:
diff changeset
2563
kono
parents:
diff changeset
2564
kono
parents:
diff changeset
2565
kono
parents:
diff changeset
2566 //# 41 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2
kono
parents:
diff changeset
2567
kono
parents:
diff changeset
2568 extern const char *stringify(bool b);
kono
parents:
diff changeset
2569 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1
kono
parents:
diff changeset
2570 // This is part of the iostream library, providing -*- C++ -*- input/output.
kono
parents:
diff changeset
2571 // Copyright (C) 1991 Per Bothner.
kono
parents:
diff changeset
2572 //
kono
parents:
diff changeset
2573 // This library is free software; you can redistribute it and/or
kono
parents:
diff changeset
2574 // modify it under the terms of the GNU Library General Public
kono
parents:
diff changeset
2575 // License as published by the Free Software Foundation; either
kono
parents:
diff changeset
2576 // version 2 of the License, or (at your option) any later version.
kono
parents:
diff changeset
2577 //
kono
parents:
diff changeset
2578 // This library is distributed in the hope that it will be useful,
kono
parents:
diff changeset
2579 // but WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
2580 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
kono
parents:
diff changeset
2581 // Library General Public License for more details.
kono
parents:
diff changeset
2582 //
kono
parents:
diff changeset
2583 // You should have received a copy of the GNU Library General Public
kono
parents:
diff changeset
2584 // License along with this library; if not, write to the Free
kono
parents:
diff changeset
2585 // Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
kono
parents:
diff changeset
2586
kono
parents:
diff changeset
2587 //# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h"
kono
parents:
diff changeset
2588
kono
parents:
diff changeset
2589 //# 43 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2
kono
parents:
diff changeset
2590
kono
parents:
diff changeset
2591 extern ostream& operator<<(ostream&, bool);
kono
parents:
diff changeset
2592
kono
parents:
diff changeset
2593 // Should this be kept separate? bool isn't, but then is
kono
parents:
diff changeset
2594 // included here only to define ostream& operator<<(ostream&, bool)
kono
parents:
diff changeset
2595 //# 1 "/sandbox/wbaker/wbaker0/source/mips/include/unit.h" 1
kono
parents:
diff changeset
2596 // -*- C++ -*-
kono
parents:
diff changeset
2597
kono
parents:
diff changeset
2598
kono
parents:
diff changeset
2599
kono
parents:
diff changeset
2600 //
kono
parents:
diff changeset
2601 // unit enum
kono
parents:
diff changeset
2602 //
kono
parents:
diff changeset
2603 // Wendell Baker, Berkeley CAD Group, 1991 (wbaker@ic.Berkeley.EDU)
kono
parents:
diff changeset
2604 //
kono
parents:
diff changeset
2605
kono
parents:
diff changeset
2606
kono
parents:
diff changeset
2607 //
kono
parents:
diff changeset
2608 // unit enum
kono
parents:
diff changeset
2609 //
kono
parents:
diff changeset
2610 // This _looks_ silly, but it has an important theoretical basis in category
kono
parents:
diff changeset
2611 // theory. For the pragmatic reason for its existence, see the example below.
kono
parents:
diff changeset
2612 //
kono
parents:
diff changeset
2613 enum unit {
kono
parents:
diff changeset
2614 UNIT = 1,
kono
parents:
diff changeset
2615 };
kono
parents:
diff changeset
2616
kono
parents:
diff changeset
2617 extern const char *stringify(unit u);
kono
parents:
diff changeset
2618
kono
parents:
diff changeset
2619 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1
kono
parents:
diff changeset
2620 // This is part of the iostream library, providing -*- C++ -*- input/output.
kono
parents:
diff changeset
2621 // Copyright (C) 1991 Per Bothner.
kono
parents:
diff changeset
2622 //
kono
parents:
diff changeset
2623 // This library is free software; you can redistribute it and/or
kono
parents:
diff changeset
2624 // modify it under the terms of the GNU Library General Public
kono
parents:
diff changeset
2625 // License as published by the Free Software Foundation; either
kono
parents:
diff changeset
2626 // version 2 of the License, or (at your option) any later version.
kono
parents:
diff changeset
2627 //
kono
parents:
diff changeset
2628 // This library is distributed in the hope that it will be useful,
kono
parents:
diff changeset
2629 // but WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
2630 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
kono
parents:
diff changeset
2631 // Library General Public License for more details.
kono
parents:
diff changeset
2632 //
kono
parents:
diff changeset
2633 // You should have received a copy of the GNU Library General Public
kono
parents:
diff changeset
2634 // License along with this library; if not, write to the Free
kono
parents:
diff changeset
2635 // Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
kono
parents:
diff changeset
2636
kono
parents:
diff changeset
2637 //# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h"
kono
parents:
diff changeset
2638
kono
parents:
diff changeset
2639 //# 28 "/sandbox/wbaker/wbaker0/source/mips/include/unit.h" 2
kono
parents:
diff changeset
2640
kono
parents:
diff changeset
2641 extern ostream& operator<<(ostream&, unit);
kono
parents:
diff changeset
2642
kono
parents:
diff changeset
2643 //
kono
parents:
diff changeset
2644 // A unit is used in cases where the type signature of an overloaded
kono
parents:
diff changeset
2645 // function must be differentiated in some stronger way than can be
kono
parents:
diff changeset
2646 // denoted unambiguously in the C++ syntax. This enum is used to give
kono
parents:
diff changeset
2647 // one of the functions a different type signature, thereby allowing
kono
parents:
diff changeset
2648 // the overloading.
kono
parents:
diff changeset
2649 //
kono
parents:
diff changeset
2650 // The use of ``unit'' instead of int or bool is important because a unit
kono
parents:
diff changeset
2651 // has only one possible value; therefore it adds no more information to
kono
parents:
diff changeset
2652 // the code. For example, say a bool was used instead, then in the testing
kono
parents:
diff changeset
2653 // phase, would have to ask: what if TRUE was given, what if FALSE was given.
kono
parents:
diff changeset
2654 // The problem is compounded if char or int is used.
kono
parents:
diff changeset
2655 //
kono
parents:
diff changeset
2656 // Example:
kono
parents:
diff changeset
2657 //
kono
parents:
diff changeset
2658 // class ID {
kono
parents:
diff changeset
2659 // public:
kono
parents:
diff changeset
2660 // ID(); // construct a null ID
kono
parents:
diff changeset
2661 // ID(unit); // alloc a ID with a new id
kono
parents:
diff changeset
2662 // private:
kono
parents:
diff changeset
2663 // static unsigned high_water;
kono
parents:
diff changeset
2664 // unsigned id;
kono
parents:
diff changeset
2665 // };
kono
parents:
diff changeset
2666 //
kono
parents:
diff changeset
2667 // Try working this example save that ID implements all of the generic
kono
parents:
diff changeset
2668 // features of the identifier object, but the high_water is stored
kono
parents:
diff changeset
2669 // in the heir. That is what originally motivated the creation of unit.
kono
parents:
diff changeset
2670 //
kono
parents:
diff changeset
2671
kono
parents:
diff changeset
2672
kono
parents:
diff changeset
2673 //# 48 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2
kono
parents:
diff changeset
2674
kono
parents:
diff changeset
2675
kono
parents:
diff changeset
2676 //
kono
parents:
diff changeset
2677 // In the spirit of the standard GNU error handler functions
kono
parents:
diff changeset
2678 // as described in
kono
parents:
diff changeset
2679 // typedef void (*one_arg_error_handler_t)(const char*);
kono
parents:
diff changeset
2680 // a one argument error handler function pointer
kono
parents:
diff changeset
2681 // typedef void (*two_arg_error_handler_t)(const char*, const char*);
kono
parents:
diff changeset
2682 // a two argument error handler function pointer
kono
parents:
diff changeset
2683 //
kono
parents:
diff changeset
2684 // And now the NEW
kono
parents:
diff changeset
2685 //
kono
parents:
diff changeset
2686 // typedef void (*zero_arg_error_handler_t)();
kono
parents:
diff changeset
2687 // a zero argument error handler function pointer
kono
parents:
diff changeset
2688 //
kono
parents:
diff changeset
2689 typedef void (*zero_arg_error_handler_t)();
kono
parents:
diff changeset
2690
kono
parents:
diff changeset
2691 //
kono
parents:
diff changeset
2692 // In the spirit of the default GNU error handler functions
kono
parents:
diff changeset
2693 // as described in
kono
parents:
diff changeset
2694 // extern void default_one_arg_error_handler(const char *message);
kono
parents:
diff changeset
2695 // print out message on stderr, and do the default thing (abort)
kono
parents:
diff changeset
2696 // extern void default_two_arg_error_handler(const char *kind, const char *message);
kono
parents:
diff changeset
2697 // print out kind and message on stderr, and do the default thing (abort)
kono
parents:
diff changeset
2698 //
kono
parents:
diff changeset
2699 // And now the NEW
kono
parents:
diff changeset
2700 //
kono
parents:
diff changeset
2701 // extern void default_zero_arg_error_handler(const char *message);
kono
parents:
diff changeset
2702 // do the default thing (abort)
kono
parents:
diff changeset
2703 //
kono
parents:
diff changeset
2704 extern void default_zero_arg_error_handler();
kono
parents:
diff changeset
2705
kono
parents:
diff changeset
2706 // Guaranteed to exit (1)
kono
parents:
diff changeset
2707 extern void exit_zero_arg_error_handler();
kono
parents:
diff changeset
2708 extern void exit_one_arg_error_handler(const char *message);
kono
parents:
diff changeset
2709 extern void exit_two_arg_error_handler(const char *kind, const char *message);
kono
parents:
diff changeset
2710
kono
parents:
diff changeset
2711 // Guaranteed to abort()
kono
parents:
diff changeset
2712 extern void abort_zero_arg_error_handler();
kono
parents:
diff changeset
2713 extern void abort_one_arg_error_handler(const char *message);
kono
parents:
diff changeset
2714 extern void abort_two_arg_error_handler(const char *kind, const char *message);
kono
parents:
diff changeset
2715
kono
parents:
diff changeset
2716 //
kono
parents:
diff changeset
2717 // In the spirit of the standard GNU error handlers
kono
parents:
diff changeset
2718 // as described in
kono
parents:
diff changeset
2719 // extern void verbose_File_error_handler(const char*);
kono
parents:
diff changeset
2720 // perror and set errno = 0
kono
parents:
diff changeset
2721 // extern void quiet_File_error_handler(const char*);
kono
parents:
diff changeset
2722 // set errno = 0
kono
parents:
diff changeset
2723 // extern void fatal_File_error_handler(const char*);
kono
parents:
diff changeset
2724 // perror and exit 1
kono
parents:
diff changeset
2725 //
kono
parents:
diff changeset
2726 // And now the NEW
kono
parents:
diff changeset
2727 //
kono
parents:
diff changeset
2728 // extern void preserve_File_error_handler(const char *message);
kono
parents:
diff changeset
2729 // no perror, no assignment to errno.
kono
parents:
diff changeset
2730 //
kono
parents:
diff changeset
2731 extern void preserve_File_error_handler(const char *message);
kono
parents:
diff changeset
2732
kono
parents:
diff changeset
2733
kono
parents:
diff changeset
2734 //# 27 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 2
kono
parents:
diff changeset
2735
kono
parents:
diff changeset
2736 //# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1
kono
parents:
diff changeset
2737 // -*- C++ -*-
kono
parents:
diff changeset
2738 //# 52 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h"
kono
parents:
diff changeset
2739
kono
parents:
diff changeset
2740 //# 28 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 2
kono
parents:
diff changeset
2741
kono
parents:
diff changeset
2742
kono
parents:
diff changeset
2743 //
kono
parents:
diff changeset
2744 // It is expected that this will be virtually multiply inherited
kono
parents:
diff changeset
2745 // into all of the classes that need error reporting services.
kono
parents:
diff changeset
2746 //
kono
parents:
diff changeset
2747 // The typical way to have that done is by inheriting the GttObject
kono
parents:
diff changeset
2748 // as a virtual base class.
kono
parents:
diff changeset
2749 //
kono
parents:
diff changeset
2750
kono
parents:
diff changeset
2751 //
kono
parents:
diff changeset
2752 // GttErrorHandler class
kono
parents:
diff changeset
2753 //
kono
parents:
diff changeset
2754 class GttErrorHandler {
kono
parents:
diff changeset
2755 public:
kono
parents:
diff changeset
2756 GttErrorHandler();
kono
parents:
diff changeset
2757 GttErrorHandler(const char *program);
kono
parents:
diff changeset
2758 virtual ~GttErrorHandler();
kono
parents:
diff changeset
2759
kono
parents:
diff changeset
2760 //
kono
parents:
diff changeset
2761 // Error messages
kono
parents:
diff changeset
2762 // - an unacceptable, but expected and recoverable condition
kono
parents:
diff changeset
2763 // was detected (but the test fails)
kono
parents:
diff changeset
2764 // - errors are for ``the expected environment was not found''
kono
parents:
diff changeset
2765 // rather than for ``file couldn't be opened''
kono
parents:
diff changeset
2766 // - these messages cannot be shut off
kono
parents:
diff changeset
2767 // - the error handler determines the recovery action
kono
parents:
diff changeset
2768 // TODO - one day exceptions will be used here
kono
parents:
diff changeset
2769 //
kono
parents:
diff changeset
2770 static void error(const char *message);
kono
parents:
diff changeset
2771 static void error(tostrstream& message);
kono
parents:
diff changeset
2772
kono
parents:
diff changeset
2773 static void error(const char *function, const char *message);
kono
parents:
diff changeset
2774 static void error(const char *function, tostrstream& message);
kono
parents:
diff changeset
2775
kono
parents:
diff changeset
2776 static void error(const char *class_name, const char *method, const char *message);
kono
parents:
diff changeset
2777 static void error(const char *class_name, const char *method, tostrstream& message);
kono
parents:
diff changeset
2778
kono
parents:
diff changeset
2779 //
kono
parents:
diff changeset
2780 // Fatal messages
kono
parents:
diff changeset
2781 // - an unacceptable and unexpected error was detected
kono
parents:
diff changeset
2782 // the data invariants were violated, there is no recovery
kono
parents:
diff changeset
2783 // - these messages cannot be shut off
kono
parents:
diff changeset
2784 // - the error handler determines the recovery action
kono
parents:
diff changeset
2785 // TODO - one day exceptions will be used here
kono
parents:
diff changeset
2786 //
kono
parents:
diff changeset
2787 static void fatal(const char *message);
kono
parents:
diff changeset
2788 static void fatal(tostrstream& message);
kono
parents:
diff changeset
2789
kono
parents:
diff changeset
2790 static void fatal(const char *function, const char *message);
kono
parents:
diff changeset
2791 static void fatal(const char *function, tostrstream& message);
kono
parents:
diff changeset
2792
kono
parents:
diff changeset
2793 static void fatal(const char *class_name, const char *method, const char *message);
kono
parents:
diff changeset
2794 static void fatal(const char *class_name, const char *method, tostrstream& message);
kono
parents:
diff changeset
2795 private:
kono
parents:
diff changeset
2796 //
kono
parents:
diff changeset
2797 // Two underscores are used here in order to prevent confusion of these
kono
parents:
diff changeset
2798 // private variables with any of the heir's private variables. Note that
kono
parents:
diff changeset
2799 // access control is different than visibility in C++, so all the variable
kono
parents:
diff changeset
2800 // names in a class hierarchy must be unique.
kono
parents:
diff changeset
2801 //
kono
parents:
diff changeset
2802
kono
parents:
diff changeset
2803 static bool __partial_init;
kono
parents:
diff changeset
2804 static void __partial_initialize();
kono
parents:
diff changeset
2805 static bool __full_init;
kono
parents:
diff changeset
2806 static void __full_initialize(const char *program);
kono
parents:
diff changeset
2807 static char *__program;
kono
parents:
diff changeset
2808
kono
parents:
diff changeset
2809 static void __handle_error();
kono
parents:
diff changeset
2810 static void __handle_fatal();
kono
parents:
diff changeset
2811 static void __add_newline(const char *message);
kono
parents:
diff changeset
2812
kono
parents:
diff changeset
2813 static bool __output_valid();
kono
parents:
diff changeset
2814 static ostream *__output;
kono
parents:
diff changeset
2815 };
kono
parents:
diff changeset
2816
kono
parents:
diff changeset
2817
kono
parents:
diff changeset
2818 //# 27 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 2
kono
parents:
diff changeset
2819
kono
parents:
diff changeset
2820
kono
parents:
diff changeset
2821 //
kono
parents:
diff changeset
2822 // GttObject class (is abstract)
kono
parents:
diff changeset
2823 //
kono
parents:
diff changeset
2824 class GttObject: virtual public GttErrorHandler {
kono
parents:
diff changeset
2825 protected:
kono
parents:
diff changeset
2826 GttObject();
kono
parents:
diff changeset
2827 GttObject(const GttObject&);
kono
parents:
diff changeset
2828 virtual ~GttObject(); // ensure descendants have virtual destructors
kono
parents:
diff changeset
2829
kono
parents:
diff changeset
2830 public:
kono
parents:
diff changeset
2831 //
kono
parents:
diff changeset
2832 // I/O Support
kono
parents:
diff changeset
2833 //
kono
parents:
diff changeset
2834 // The value typically persists only long enough for an i/o operation
kono
parents:
diff changeset
2835 // to be performed (see the defintion of output via operator<<(... ) below)
kono
parents:
diff changeset
2836 virtual const char *stringify();
kono
parents:
diff changeset
2837 protected:
kono
parents:
diff changeset
2838 // This is the buffer into which the printed representation of this
kono
parents:
diff changeset
2839 // object will be put when the time comes. It is associated with the
kono
parents:
diff changeset
2840 // object so it will never go away (so long as the object exists).
kono
parents:
diff changeset
2841 // Use a pointer so that you only pay for the space when I/O is used
kono
parents:
diff changeset
2842 tostrstream *stringbuf;
kono
parents:
diff changeset
2843 void clear_stringbuf();
kono
parents:
diff changeset
2844
kono
parents:
diff changeset
2845 public:
kono
parents:
diff changeset
2846 //
kono
parents:
diff changeset
2847 // Consistency
kono
parents:
diff changeset
2848 //
kono
parents:
diff changeset
2849 // The global data invariant for the whole object (heirs included).
kono
parents:
diff changeset
2850 // This OK function will call the local invariant function ok() if
kono
parents:
diff changeset
2851 // necessary and in addition the OK functions of the heirs
kono
parents:
diff changeset
2852 // This is expected to compute the data invariant of the object.
kono
parents:
diff changeset
2853 // It will execute GctErrorHandler::fatal if there is wrong.
kono
parents:
diff changeset
2854 virtual void OK() const;
kono
parents:
diff changeset
2855
kono
parents:
diff changeset
2856 protected:
kono
parents:
diff changeset
2857 //
kono
parents:
diff changeset
2858 // consistency
kono
parents:
diff changeset
2859 //
kono
parents:
diff changeset
2860 // This function computes the invariant which is local to this object.
kono
parents:
diff changeset
2861 // It does not call any of the ancestor's OK() or ok() functions.
kono
parents:
diff changeset
2862 // It is not a virtual function so that it can be called from within a
kono
parents:
diff changeset
2863 // constructor with impunity. Thus this function MUST NOT call any
kono
parents:
diff changeset
2864 // virtual functions either; it should call them by their full name if
kono
parents:
diff changeset
2865 // that is necessary. The global OK() function will call this function
kono
parents:
diff changeset
2866 // as necessary.
kono
parents:
diff changeset
2867 //
kono
parents:
diff changeset
2868 // This function must NOT NEVER EVER be made virtual.
kono
parents:
diff changeset
2869 void ok() const;
kono
parents:
diff changeset
2870
kono
parents:
diff changeset
2871 protected:
kono
parents:
diff changeset
2872 //
kono
parents:
diff changeset
2873 // Class Name
kono
parents:
diff changeset
2874 //
kono
parents:
diff changeset
2875 // This must return a static (constant) string which is the name
kono
parents:
diff changeset
2876 // of the class being declared. By convention, not all classes
kono
parents:
diff changeset
2877 // must have one of these, but the major root abstract class must
kono
parents:
diff changeset
2878 // have one in order to allow the stringify() to work approximately
kono
parents:
diff changeset
2879 // correctly.
kono
parents:
diff changeset
2880 virtual const char *class_name() const = 0;
kono
parents:
diff changeset
2881 };
kono
parents:
diff changeset
2882
kono
parents:
diff changeset
2883 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1
kono
parents:
diff changeset
2884 // This is part of the iostream library, providing -*- C++ -*- input/output.
kono
parents:
diff changeset
2885 // Copyright (C) 1991 Per Bothner.
kono
parents:
diff changeset
2886 //
kono
parents:
diff changeset
2887 // This library is free software; you can redistribute it and/or
kono
parents:
diff changeset
2888 // modify it under the terms of the GNU Library General Public
kono
parents:
diff changeset
2889 // License as published by the Free Software Foundation; either
kono
parents:
diff changeset
2890 // version 2 of the License, or (at your option) any later version.
kono
parents:
diff changeset
2891 //
kono
parents:
diff changeset
2892 // This library is distributed in the hope that it will be useful,
kono
parents:
diff changeset
2893 // but WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
2894 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
kono
parents:
diff changeset
2895 // Library General Public License for more details.
kono
parents:
diff changeset
2896 //
kono
parents:
diff changeset
2897 // You should have received a copy of the GNU Library General Public
kono
parents:
diff changeset
2898 // License along with this library; if not, write to the Free
kono
parents:
diff changeset
2899 // Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
kono
parents:
diff changeset
2900
kono
parents:
diff changeset
2901 //# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h"
kono
parents:
diff changeset
2902
kono
parents:
diff changeset
2903 //# 91 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 2
kono
parents:
diff changeset
2904
kono
parents:
diff changeset
2905 extern ostream& operator<<(ostream&, GttObject&);
kono
parents:
diff changeset
2906
kono
parents:
diff changeset
2907 // There may be other X& operator<<(X&, GttObject&) defined in the
kono
parents:
diff changeset
2908 // packages defining class X. For example see the definition of
kono
parents:
diff changeset
2909 // GttUnitObject& operator<<(GttUnitObject&, GttObject&) in Unit.
kono
parents:
diff changeset
2910
kono
parents:
diff changeset
2911
kono
parents:
diff changeset
2912 //# 27 "../../../../../../mips/include/Gct/Object/GctObject.h" 2
kono
parents:
diff changeset
2913
kono
parents:
diff changeset
2914
kono
parents:
diff changeset
2915 //# 1 "../../../../../../mips/include/Gct/GctErrorHandler.h" 1
kono
parents:
diff changeset
2916 // -*- C++ -*-
kono
parents:
diff changeset
2917
kono
parents:
diff changeset
2918
kono
parents:
diff changeset
2919
kono
parents:
diff changeset
2920 //
kono
parents:
diff changeset
2921 // GctErrorHandler class
kono
parents:
diff changeset
2922 //
kono
parents:
diff changeset
2923 // Expects to be included by Gct.h
kono
parents:
diff changeset
2924 //
kono
parents:
diff changeset
2925 // Wendell Baker, Berkeley CAD Group, 1991 (wbaker@ic.Berkeley.EDU)
kono
parents:
diff changeset
2926 //
kono
parents:
diff changeset
2927
kono
parents:
diff changeset
2928
kono
parents:
diff changeset
2929
kono
parents:
diff changeset
2930
kono
parents:
diff changeset
2931
kono
parents:
diff changeset
2932 //#pragma interface
kono
parents:
diff changeset
2933
kono
parents:
diff changeset
2934
kono
parents:
diff changeset
2935
kono
parents:
diff changeset
2936 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1
kono
parents:
diff changeset
2937
kono
parents:
diff changeset
2938
kono
parents:
diff changeset
2939
kono
parents:
diff changeset
2940
kono
parents:
diff changeset
2941
kono
parents:
diff changeset
2942
kono
parents:
diff changeset
2943
kono
parents:
diff changeset
2944 //# 25 "../../../../../../mips/include/Gct/GctErrorHandler.h" 2
kono
parents:
diff changeset
2945
kono
parents:
diff changeset
2946 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" 1
kono
parents:
diff changeset
2947 // This may look like C code, but it is really -*- C++ -*-
kono
parents:
diff changeset
2948 /*
kono
parents:
diff changeset
2949 Copyright (C) 1988 Free Software Foundation
kono
parents:
diff changeset
2950 written by Doug Lea (dl@rocky.oswego.edu)
kono
parents:
diff changeset
2951
kono
parents:
diff changeset
2952 This file is part of the GNU C++ Library. This library is free
kono
parents:
diff changeset
2953 software; you can redistribute it and/or modify it under the terms of
kono
parents:
diff changeset
2954 the GNU Library General Public License as published by the Free
kono
parents:
diff changeset
2955 Software Foundation; either version 2 of the License, or (at your
kono
parents:
diff changeset
2956 option) any later version. This library is distributed in the hope
kono
parents:
diff changeset
2957 that it will be useful, but WITHOUT ANY WARRANTY; without even the
kono
parents:
diff changeset
2958 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
kono
parents:
diff changeset
2959 PURPOSE. See the GNU Library General Public License for more details.
kono
parents:
diff changeset
2960 You should have received a copy of the GNU Library General Public
kono
parents:
diff changeset
2961 License along with this library; if not, write to the Free Software
kono
parents:
diff changeset
2962 Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
kono
parents:
diff changeset
2963 */
kono
parents:
diff changeset
2964
kono
parents:
diff changeset
2965
kono
parents:
diff changeset
2966 //# 1321 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h"
kono
parents:
diff changeset
2967
kono
parents:
diff changeset
2968 //# 26 "../../../../../../mips/include/Gct/GctErrorHandler.h" 2
kono
parents:
diff changeset
2969
kono
parents:
diff changeset
2970 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1
kono
parents:
diff changeset
2971 // This is part of the iostream library, providing -*- C++ -*- input/output.
kono
parents:
diff changeset
2972 // Copyright (C) 1991 Per Bothner.
kono
parents:
diff changeset
2973 //
kono
parents:
diff changeset
2974 // This library is free software; you can redistribute it and/or
kono
parents:
diff changeset
2975 // modify it under the terms of the GNU Library General Public
kono
parents:
diff changeset
2976 // License as published by the Free Software Foundation; either
kono
parents:
diff changeset
2977 // version 2 of the License, or (at your option) any later version.
kono
parents:
diff changeset
2978 //
kono
parents:
diff changeset
2979 // This library is distributed in the hope that it will be useful,
kono
parents:
diff changeset
2980 // but WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
2981 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
kono
parents:
diff changeset
2982 // Library General Public License for more details.
kono
parents:
diff changeset
2983 //
kono
parents:
diff changeset
2984 // You should have received a copy of the GNU Library General Public
kono
parents:
diff changeset
2985 // License along with this library; if not, write to the Free
kono
parents:
diff changeset
2986 // Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
kono
parents:
diff changeset
2987
kono
parents:
diff changeset
2988 //# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h"
kono
parents:
diff changeset
2989
kono
parents:
diff changeset
2990 //# 27 "../../../../../../mips/include/Gct/GctErrorHandler.h" 2
kono
parents:
diff changeset
2991
kono
parents:
diff changeset
2992
kono
parents:
diff changeset
2993 //# 1 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 1
kono
parents:
diff changeset
2994 // -*- C++ -*-
kono
parents:
diff changeset
2995 //# 107 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h"
kono
parents:
diff changeset
2996
kono
parents:
diff changeset
2997 //# 29 "../../../../../../mips/include/Gct/GctErrorHandler.h" 2
kono
parents:
diff changeset
2998
kono
parents:
diff changeset
2999 //# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1
kono
parents:
diff changeset
3000 // -*- C++ -*-
kono
parents:
diff changeset
3001 //# 52 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h"
kono
parents:
diff changeset
3002
kono
parents:
diff changeset
3003 //# 30 "../../../../../../mips/include/Gct/GctErrorHandler.h" 2
kono
parents:
diff changeset
3004
kono
parents:
diff changeset
3005
kono
parents:
diff changeset
3006 //# 1 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 1
kono
parents:
diff changeset
3007 // -*- C++ -*-
kono
parents:
diff changeset
3008 //# 98 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h"
kono
parents:
diff changeset
3009
kono
parents:
diff changeset
3010 //# 32 "../../../../../../mips/include/Gct/GctErrorHandler.h" 2
kono
parents:
diff changeset
3011
kono
parents:
diff changeset
3012
kono
parents:
diff changeset
3013 //
kono
parents:
diff changeset
3014 // It is expected that this will be virtually multiply inherited
kono
parents:
diff changeset
3015 // into all of the classes that need error reporting services.
kono
parents:
diff changeset
3016 //
kono
parents:
diff changeset
3017 // The typical way to have that done is by inheriting the GctObject
kono
parents:
diff changeset
3018 // as a virtual base class.
kono
parents:
diff changeset
3019 //
kono
parents:
diff changeset
3020
kono
parents:
diff changeset
3021 //
kono
parents:
diff changeset
3022 // GctErrorHandler class
kono
parents:
diff changeset
3023 //
kono
parents:
diff changeset
3024 // GPP_1_96_BUG
kono
parents:
diff changeset
3025 // NOTE - virtual public GttObject should be MI into GctObject - but that
kono
parents:
diff changeset
3026 // causes g++ 1.96 to segfault; so we must inherit GttObject here and use SI
kono
parents:
diff changeset
3027 // GPP_1_96_BUG
kono
parents:
diff changeset
3028 class GctErrorHandler: virtual public GttObject {
kono
parents:
diff changeset
3029 public:
kono
parents:
diff changeset
3030 GctErrorHandler();
kono
parents:
diff changeset
3031 GctErrorHandler(const String& program);
kono
parents:
diff changeset
3032 virtual ~GctErrorHandler();
kono
parents:
diff changeset
3033
kono
parents:
diff changeset
3034 //
kono
parents:
diff changeset
3035 // Debugging messages
kono
parents:
diff changeset
3036 // - these are turned off for production code.
kono
parents:
diff changeset
3037 // - these messages can be shut off
kono
parents:
diff changeset
3038 //
kono
parents:
diff changeset
3039 static void debug(const char *message);
kono
parents:
diff changeset
3040 static void debug(tostrstream& message);
kono
parents:
diff changeset
3041
kono
parents:
diff changeset
3042 static void debug(const char *function, const char *message);
kono
parents:
diff changeset
3043 static void debug(const char *function, tostrstream& message);
kono
parents:
diff changeset
3044
kono
parents:
diff changeset
3045 static void debug(const char *class_name, const char *method, const char *message);
kono
parents:
diff changeset
3046 static void debug(const char *class_name, const char *method, tostrstream& message);
kono
parents:
diff changeset
3047
kono
parents:
diff changeset
3048 static bool debug(); // current debug switch
kono
parents:
diff changeset
3049 static void debug(bool value); // change the debug switch
kono
parents:
diff changeset
3050
kono
parents:
diff changeset
3051 //
kono
parents:
diff changeset
3052 // Informational messages
kono
parents:
diff changeset
3053 // - these correspond to a ``verbose'' mode
kono
parents:
diff changeset
3054 // - these are not errors, just chatty progress reports
kono
parents:
diff changeset
3055 // - these messages can be shut off
kono
parents:
diff changeset
3056 //
kono
parents:
diff changeset
3057 static void note(const char *message);
kono
parents:
diff changeset
3058 static void note(tostrstream& message);
kono
parents:
diff changeset
3059
kono
parents:
diff changeset
3060 static void note(const char *function, const char *message);
kono
parents:
diff changeset
3061 static void note(const char *function, tostrstream& message);
kono
parents:
diff changeset
3062
kono
parents:
diff changeset
3063 static void note(const char *class_name, const char *method, const char *message);
kono
parents:
diff changeset
3064 static void note(const char *class_name, const char *method, tostrstream& message);
kono
parents:
diff changeset
3065
kono
parents:
diff changeset
3066 static bool note(); // current note switch
kono
parents:
diff changeset
3067 static void note(bool value); // change the note switch
kono
parents:
diff changeset
3068
kono
parents:
diff changeset
3069 //
kono
parents:
diff changeset
3070 // Warning messages
kono
parents:
diff changeset
3071 // - warnings are system-recoverable errors
kono
parents:
diff changeset
3072 // - the system has noticed something and taken some
kono
parents:
diff changeset
3073 // corrective action
kono
parents:
diff changeset
3074 // - these messages can be shut off
kono
parents:
diff changeset
3075 //
kono
parents:
diff changeset
3076 static void warning(const char *message);
kono
parents:
diff changeset
3077 static void warning(tostrstream& message);
kono
parents:
diff changeset
3078
kono
parents:
diff changeset
3079 static void warning(const char *function, const char *message);
kono
parents:
diff changeset
3080 static void warning(const char *function, tostrstream& message);
kono
parents:
diff changeset
3081
kono
parents:
diff changeset
3082 static void warning(const char *class_name, const char *method, const char *message);
kono
parents:
diff changeset
3083 static void warning(const char *class_name, const char *method, tostrstream& message);
kono
parents:
diff changeset
3084
kono
parents:
diff changeset
3085 static bool warning(); // current warning switch
kono
parents:
diff changeset
3086 static void warning(bool value); // change the warning switch
kono
parents:
diff changeset
3087
kono
parents:
diff changeset
3088 //
kono
parents:
diff changeset
3089 // Error messages
kono
parents:
diff changeset
3090 // - an unacceptable, but expected and recoverable
kono
parents:
diff changeset
3091 // condition was detected
kono
parents:
diff changeset
3092 // - errors are for ``the expected environment was not found''
kono
parents:
diff changeset
3093 // rather than for ``file couldn't be opened''
kono
parents:
diff changeset
3094 // - these messages cannot be shut off
kono
parents:
diff changeset
3095 // - the error handler determines the recovery action
kono
parents:
diff changeset
3096 // TODO - one day exceptions will be used here
kono
parents:
diff changeset
3097 //
kono
parents:
diff changeset
3098 static void error(const char *message);
kono
parents:
diff changeset
3099 static void error(tostrstream& message);
kono
parents:
diff changeset
3100
kono
parents:
diff changeset
3101 static void error(const char *function, const char *message);
kono
parents:
diff changeset
3102 static void error(const char *function, tostrstream& message);
kono
parents:
diff changeset
3103
kono
parents:
diff changeset
3104 static void error(const char *class_name, const char *method, const char *message);
kono
parents:
diff changeset
3105 static void error(const char *class_name, const char *method, tostrstream& message);
kono
parents:
diff changeset
3106
kono
parents:
diff changeset
3107 // can't turn off errors - no ``static void error(bool value);''
kono
parents:
diff changeset
3108 static zero_arg_error_handler_t error(); // current error handler
kono
parents:
diff changeset
3109 static void error(zero_arg_error_handler_t handler);// change the error handler
kono
parents:
diff changeset
3110
kono
parents:
diff changeset
3111 static void error_is_lib_error_handler(); // change the error handler
kono
parents:
diff changeset
3112 static void error_is_exit(); // change the error handler
kono
parents:
diff changeset
3113
kono
parents:
diff changeset
3114 // Describes the fatal handler - WATCHOUT - implicitly uses AllocRing
kono
parents:
diff changeset
3115 static const char *error_handler_description();
kono
parents:
diff changeset
3116
kono
parents:
diff changeset
3117 //
kono
parents:
diff changeset
3118 // Fatal messages
kono
parents:
diff changeset
3119 // - an unacceptable and unexpected error was detected
kono
parents:
diff changeset
3120 // the data invariants were violated, there is no recovery
kono
parents:
diff changeset
3121 // - these messages cannot be shut off
kono
parents:
diff changeset
3122 // - the error handler determines the recovery action
kono
parents:
diff changeset
3123 // TODO - one day exceptions will be used here
kono
parents:
diff changeset
3124 //
kono
parents:
diff changeset
3125 static void fatal(const char *message);
kono
parents:
diff changeset
3126 static void fatal(tostrstream& message);
kono
parents:
diff changeset
3127
kono
parents:
diff changeset
3128 static void fatal(const char *function, const char *message);
kono
parents:
diff changeset
3129 static void fatal(const char *function, tostrstream& message);
kono
parents:
diff changeset
3130
kono
parents:
diff changeset
3131 static void fatal(const char *class_name, const char *method, const char *message);
kono
parents:
diff changeset
3132 static void fatal(const char *class_name, const char *method, tostrstream& message);
kono
parents:
diff changeset
3133
kono
parents:
diff changeset
3134 // can't turn off fatals - no ``static void fatal(bool value);''
kono
parents:
diff changeset
3135 static zero_arg_error_handler_t fatal(); // return the fatal handler
kono
parents:
diff changeset
3136 static void fatal(zero_arg_error_handler_t handler); // change the fatal handler
kono
parents:
diff changeset
3137
kono
parents:
diff changeset
3138 static void fatal_is_exit(); // change the fatal handler
kono
parents:
diff changeset
3139 static void fatal_is_abort(); // change the fatal handler
kono
parents:
diff changeset
3140
kono
parents:
diff changeset
3141 // Describes the fatal handler - WATCHOUT - implicitly uses AllocRing
kono
parents:
diff changeset
3142 static const char *fatal_handler_description();
kono
parents:
diff changeset
3143 private:
kono
parents:
diff changeset
3144 //
kono
parents:
diff changeset
3145 // Two underscores are used here in order to prevent confusion of these
kono
parents:
diff changeset
3146 // private variables with any of the heir's private variables. Note that
kono
parents:
diff changeset
3147 // access control is different than visibility in C++, so all the variable
kono
parents:
diff changeset
3148 // names in a class hierarchy must be unique.
kono
parents:
diff changeset
3149 //
kono
parents:
diff changeset
3150 static bool __debug;
kono
parents:
diff changeset
3151 static bool __note;
kono
parents:
diff changeset
3152 static bool __warning;
kono
parents:
diff changeset
3153 static void (*__error_handler)(); // can't turn off errors
kono
parents:
diff changeset
3154 static void (*__fatal_handler)(); // can't turn off fatals
kono
parents:
diff changeset
3155
kono
parents:
diff changeset
3156 static bool __partial_init;
kono
parents:
diff changeset
3157 static void __partial_initialize();
kono
parents:
diff changeset
3158 static bool __full_init;
kono
parents:
diff changeset
3159 static void __full_initialize(const char *program);
kono
parents:
diff changeset
3160 static char *__program;
kono
parents:
diff changeset
3161
kono
parents:
diff changeset
3162 static void __handle_error();
kono
parents:
diff changeset
3163 static void __handle_fatal();
kono
parents:
diff changeset
3164 static void __add_newline(const char *message);
kono
parents:
diff changeset
3165 static void __message_switch(bool value, bool& flag, const char *description);
kono
parents:
diff changeset
3166 static void __message_switch(bool value, bool& flag);
kono
parents:
diff changeset
3167 static const char *__describe_handler(zero_arg_error_handler_t handler);
kono
parents:
diff changeset
3168
kono
parents:
diff changeset
3169 static bool __output_valid();
kono
parents:
diff changeset
3170 static ostream *__output;
kono
parents:
diff changeset
3171
kono
parents:
diff changeset
3172 // GPP_1_96_BUG
kono
parents:
diff changeset
3173 const char *class_name() const;
kono
parents:
diff changeset
3174 // GPP_1_96_BUG
kono
parents:
diff changeset
3175 };
kono
parents:
diff changeset
3176
kono
parents:
diff changeset
3177
kono
parents:
diff changeset
3178 //# 29 "../../../../../../mips/include/Gct/Object/GctObject.h" 2
kono
parents:
diff changeset
3179
kono
parents:
diff changeset
3180
kono
parents:
diff changeset
3181 //
kono
parents:
diff changeset
3182 // GctObject class (is abstract)
kono
parents:
diff changeset
3183 //
kono
parents:
diff changeset
3184 class GctObject: virtual public GctErrorHandler /*, virtual public GttObject*/ {
kono
parents:
diff changeset
3185 protected:
kono
parents:
diff changeset
3186 GctObject();
kono
parents:
diff changeset
3187 GctObject(const GctObject&);
kono
parents:
diff changeset
3188 virtual ~GctObject(); // ensure descendants have virtual destructors
kono
parents:
diff changeset
3189
kono
parents:
diff changeset
3190 public:
kono
parents:
diff changeset
3191 //
kono
parents:
diff changeset
3192 // I/O Support
kono
parents:
diff changeset
3193 //
kono
parents:
diff changeset
3194 // The value typically persists only long enough for an i/o operation
kono
parents:
diff changeset
3195 // to be performed (see the defintion of output via operator<<(... ) below)
kono
parents:
diff changeset
3196 virtual const char *stringify();
kono
parents:
diff changeset
3197 protected:
kono
parents:
diff changeset
3198 // This is the buffer into which the printed representation of this
kono
parents:
diff changeset
3199 // object will be put when the time comes. It is associated with the
kono
parents:
diff changeset
3200 // object so it will never go away (so long as the object exists).
kono
parents:
diff changeset
3201 // Use a pointer so that you only pay for the space when I/O is used
kono
parents:
diff changeset
3202 tostrstream *stringbuf;
kono
parents:
diff changeset
3203 void clear_stringbuf();
kono
parents:
diff changeset
3204
kono
parents:
diff changeset
3205 public:
kono
parents:
diff changeset
3206 //
kono
parents:
diff changeset
3207 // Consistency (global consistency)
kono
parents:
diff changeset
3208 //
kono
parents:
diff changeset
3209 // The global data invariant for the whole object (heirs included).
kono
parents:
diff changeset
3210 // This OK function will call the local invariant function ok() if
kono
parents:
diff changeset
3211 // necessary and in addition the OK functions of the heirs
kono
parents:
diff changeset
3212 // This is expected to compute the data invariant of the object.
kono
parents:
diff changeset
3213 // It will execute GctErrorHandler::fatal if there is wrong.
kono
parents:
diff changeset
3214 virtual void OK() const;
kono
parents:
diff changeset
3215
kono
parents:
diff changeset
3216 protected:
kono
parents:
diff changeset
3217 //
kono
parents:
diff changeset
3218 // consistency (local consistency)
kono
parents:
diff changeset
3219 //
kono
parents:
diff changeset
3220 // This function computes the invariant which is local to this object.
kono
parents:
diff changeset
3221 // It does not call any of the ancestor's OK() or ok() functions.
kono
parents:
diff changeset
3222 // It is not a virtual function so that it can be called from within a
kono
parents:
diff changeset
3223 // constructor with impunity. Thus this function MUST NOT call any
kono
parents:
diff changeset
3224 // virtual functions either; it should call them by their full name if
kono
parents:
diff changeset
3225 // that is necessary. The global OK() function will call this function
kono
parents:
diff changeset
3226 // as necessary.
kono
parents:
diff changeset
3227 //
kono
parents:
diff changeset
3228 // This function must NOT NEVER EVER be made virtual.
kono
parents:
diff changeset
3229 void ok() const;
kono
parents:
diff changeset
3230 protected:
kono
parents:
diff changeset
3231 //
kono
parents:
diff changeset
3232 // Class Name
kono
parents:
diff changeset
3233 //
kono
parents:
diff changeset
3234 // This must return a static (constant) string which is the name
kono
parents:
diff changeset
3235 // of the class being declared. By convention, not all classes
kono
parents:
diff changeset
3236 // must have one of these, but the major root abstract class must
kono
parents:
diff changeset
3237 // have one in order to allow the stringify() to work approximately
kono
parents:
diff changeset
3238 // correctly.
kono
parents:
diff changeset
3239 virtual const char *class_name() const = 0;
kono
parents:
diff changeset
3240
kono
parents:
diff changeset
3241 public:
kono
parents:
diff changeset
3242 //
kono
parents:
diff changeset
3243 // The ``id'' of this object
kono
parents:
diff changeset
3244 //
kono
parents:
diff changeset
3245 // NOTE - we explicitly allow the situation where this function
kono
parents:
diff changeset
3246 // can return the address of the object - the ``this'' pointer
kono
parents:
diff changeset
3247 // instead of a computed id field (the __object_id field below).
kono
parents:
diff changeset
3248 //
kono
parents:
diff changeset
3249 // This function is protected because we don't want too much dependence
kono
parents:
diff changeset
3250 // on this notion of object identity. I want to be able to rip it
kono
parents:
diff changeset
3251 // out if it becomes to cumbersome.
kono
parents:
diff changeset
3252 unsigned objectId() const;
kono
parents:
diff changeset
3253 private:
kono
parents:
diff changeset
3254 //
kono
parents:
diff changeset
3255 // Symbolic ID
kono
parents:
diff changeset
3256 //
kono
parents:
diff changeset
3257 // NOTE - Normally this would be implemented by the `this' pointer.
kono
parents:
diff changeset
3258 // TODO - remove this for production code
kono
parents:
diff changeset
3259 //
kono
parents:
diff changeset
3260 // However, in order to make the test suites run on all machines, we
kono
parents:
diff changeset
3261 // make this into a symbolic id that is maintained with each object.
kono
parents:
diff changeset
3262 // Thus the valid outputs are always consistent across all machines.
kono
parents:
diff changeset
3263 unsigned __object_id;
kono
parents:
diff changeset
3264 static unsigned __next_id;
kono
parents:
diff changeset
3265 };
kono
parents:
diff changeset
3266
kono
parents:
diff changeset
3267 //# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1
kono
parents:
diff changeset
3268 // This is part of the iostream library, providing -*- C++ -*- input/output.
kono
parents:
diff changeset
3269 // Copyright (C) 1991 Per Bothner.
kono
parents:
diff changeset
3270 //
kono
parents:
diff changeset
3271 // This library is free software; you can redistribute it and/or
kono
parents:
diff changeset
3272 // modify it under the terms of the GNU Library General Public
kono
parents:
diff changeset
3273 // License as published by the Free Software Foundation; either
kono
parents:
diff changeset
3274 // version 2 of the License, or (at your option) any later version.
kono
parents:
diff changeset
3275 //
kono
parents:
diff changeset
3276 // This library is distributed in the hope that it will be useful,
kono
parents:
diff changeset
3277 // but WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
3278 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
kono
parents:
diff changeset
3279 // Library General Public License for more details.
kono
parents:
diff changeset
3280 //
kono
parents:
diff changeset
3281 // You should have received a copy of the GNU Library General Public
kono
parents:
diff changeset
3282 // License along with this library; if not, write to the Free
kono
parents:
diff changeset
3283 // Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
kono
parents:
diff changeset
3284
kono
parents:
diff changeset
3285 //# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h"
kono
parents:
diff changeset
3286
kono
parents:
diff changeset
3287 //# 117 "../../../../../../mips/include/Gct/Object/GctObject.h" 2
kono
parents:
diff changeset
3288
kono
parents:
diff changeset
3289 extern ostream& operator<<(ostream&, GctObject&);
kono
parents:
diff changeset
3290
kono
parents:
diff changeset
3291
kono
parents:
diff changeset
3292 //# 25 "../../../../../../mips/include/Gct/Object/GctHashObject.h" 2
kono
parents:
diff changeset
3293
kono
parents:
diff changeset
3294
kono
parents:
diff changeset
3295 //
kono
parents:
diff changeset
3296 // GctHashObject class (is abstract)
kono
parents:
diff changeset
3297 //
kono
parents:
diff changeset
3298 class GctHashObject: virtual public GctObject {
kono
parents:
diff changeset
3299 protected:
kono
parents:
diff changeset
3300 GctHashObject();
kono
parents:
diff changeset
3301 GctHashObject(const GctHashObject&);
kono
parents:
diff changeset
3302
kono
parents:
diff changeset
3303 public:
kono
parents:
diff changeset
3304 //
kono
parents:
diff changeset
3305 // hash support
kono
parents:
diff changeset
3306 //
kono
parents:
diff changeset
3307 virtual unsigned hash() const;
kono
parents:
diff changeset
3308 };
kono
parents:
diff changeset
3309
kono
parents:
diff changeset
3310
kono
parents:
diff changeset
3311 //# 28 "../../GctSymbol.h" 2
kono
parents:
diff changeset
3312
kono
parents:
diff changeset
3313
kono
parents:
diff changeset
3314 //
kono
parents:
diff changeset
3315 // GctSymbol
kono
parents:
diff changeset
3316 //
kono
parents:
diff changeset
3317 class GctSymbol: virtual public GctHashObject, String {
kono
parents:
diff changeset
3318 public:
kono
parents:
diff changeset
3319 GctSymbol(); // vacuous symbol required for genclass usage
kono
parents:
diff changeset
3320 GctSymbol(const char*);
kono
parents:
diff changeset
3321 GctSymbol(const String&);
kono
parents:
diff changeset
3322 GctSymbol(const GctSymbol&);
kono
parents:
diff changeset
3323
kono
parents:
diff changeset
3324 operator const char *() const;
kono
parents:
diff changeset
3325
kono
parents:
diff changeset
3326 bool operator==(const GctSymbol&) const;
kono
parents:
diff changeset
3327 bool operator!=(const GctSymbol&) const;
kono
parents:
diff changeset
3328
kono
parents:
diff changeset
3329 bool operator<=(const GctSymbol&) const;
kono
parents:
diff changeset
3330 bool operator<(const GctSymbol&) const;
kono
parents:
diff changeset
3331 bool operator>=(const GctSymbol&) const;
kono
parents:
diff changeset
3332 bool operator>(const GctSymbol&) const;
kono
parents:
diff changeset
3333
kono
parents:
diff changeset
3334 unsigned hash() const;
kono
parents:
diff changeset
3335
kono
parents:
diff changeset
3336 // I/O Support
kono
parents:
diff changeset
3337 const char *stringify();
kono
parents:
diff changeset
3338
kono
parents:
diff changeset
3339 // Consistency
kono
parents:
diff changeset
3340 void OK() const;
kono
parents:
diff changeset
3341 private:
kono
parents:
diff changeset
3342 const char *class_name() const;
kono
parents:
diff changeset
3343 };
kono
parents:
diff changeset
3344
kono
parents:
diff changeset
3345 extern unsigned hash(GctSymbol&); // genclass support (no const)
kono
parents:
diff changeset
3346
kono
parents:
diff changeset
3347 //
kono
parents:
diff changeset
3348 // Inline functions
kono
parents:
diff changeset
3349 //
kono
parents:
diff changeset
3350 // Note - none of the String operators save for operator const char *()
kono
parents:
diff changeset
3351 // are String member functions, instead, they are anonymous functions
kono
parents:
diff changeset
3352 // which work by overloading.
kono
parents:
diff changeset
3353 //
kono
parents:
diff changeset
3354
kono
parents:
diff changeset
3355
kono
parents:
diff changeset
3356
kono
parents:
diff changeset
3357
kono
parents:
diff changeset
3358
kono
parents:
diff changeset
3359 GctSymbol::operator const char *() const
kono
parents:
diff changeset
3360 {
kono
parents:
diff changeset
3361
kono
parents:
diff changeset
3362
kono
parents:
diff changeset
3363
kono
parents:
diff changeset
3364
kono
parents:
diff changeset
3365
kono
parents:
diff changeset
3366 return String::operator const char *();
kono
parents:
diff changeset
3367 }
kono
parents:
diff changeset
3368
kono
parents:
diff changeset
3369 bool
kono
parents:
diff changeset
3370 GctSymbol::operator==(const GctSymbol& other) const
kono
parents:
diff changeset
3371 {
kono
parents:
diff changeset
3372
kono
parents:
diff changeset
3373
kono
parents:
diff changeset
3374
kono
parents:
diff changeset
3375
kono
parents:
diff changeset
3376
kono
parents:
diff changeset
3377 return (bool)::operator==(*this, other);
kono
parents:
diff changeset
3378 }
kono
parents:
diff changeset
3379
kono
parents:
diff changeset
3380 bool
kono
parents:
diff changeset
3381 GctSymbol::operator!=(const GctSymbol& other) const
kono
parents:
diff changeset
3382 {
kono
parents:
diff changeset
3383
kono
parents:
diff changeset
3384
kono
parents:
diff changeset
3385
kono
parents:
diff changeset
3386
kono
parents:
diff changeset
3387
kono
parents:
diff changeset
3388 return (bool)::operator!=(*this, other);
kono
parents:
diff changeset
3389 }
kono
parents:
diff changeset
3390
kono
parents:
diff changeset
3391 bool
kono
parents:
diff changeset
3392 GctSymbol::operator<=(const GctSymbol& other) const
kono
parents:
diff changeset
3393 {
kono
parents:
diff changeset
3394
kono
parents:
diff changeset
3395
kono
parents:
diff changeset
3396
kono
parents:
diff changeset
3397
kono
parents:
diff changeset
3398
kono
parents:
diff changeset
3399 return (bool)::operator<=(*this, other);
kono
parents:
diff changeset
3400 }
kono
parents:
diff changeset
3401
kono
parents:
diff changeset
3402 bool
kono
parents:
diff changeset
3403 GctSymbol::operator<(const GctSymbol& other) const
kono
parents:
diff changeset
3404 {
kono
parents:
diff changeset
3405
kono
parents:
diff changeset
3406
kono
parents:
diff changeset
3407
kono
parents:
diff changeset
3408
kono
parents:
diff changeset
3409
kono
parents:
diff changeset
3410 return (bool)::operator<(*this, other);
kono
parents:
diff changeset
3411 }
kono
parents:
diff changeset
3412
kono
parents:
diff changeset
3413 bool
kono
parents:
diff changeset
3414 GctSymbol::operator>=(const GctSymbol& other) const
kono
parents:
diff changeset
3415 {
kono
parents:
diff changeset
3416
kono
parents:
diff changeset
3417
kono
parents:
diff changeset
3418
kono
parents:
diff changeset
3419
kono
parents:
diff changeset
3420
kono
parents:
diff changeset
3421 return (bool)::operator>=(*this, other);
kono
parents:
diff changeset
3422 }
kono
parents:
diff changeset
3423
kono
parents:
diff changeset
3424 bool
kono
parents:
diff changeset
3425 GctSymbol::operator>(const GctSymbol& other) const
kono
parents:
diff changeset
3426 {
kono
parents:
diff changeset
3427
kono
parents:
diff changeset
3428
kono
parents:
diff changeset
3429
kono
parents:
diff changeset
3430
kono
parents:
diff changeset
3431
kono
parents:
diff changeset
3432 return (bool)::operator>(*this, other);
kono
parents:
diff changeset
3433 }
kono
parents:
diff changeset
3434
kono
parents:
diff changeset
3435
kono
parents:
diff changeset
3436 //# 25 "GctSymbol.defs.h" 2
kono
parents:
diff changeset
3437
kono
parents:
diff changeset
3438
kono
parents:
diff changeset
3439 // equality operator
kono
parents:
diff changeset
3440
kono
parents:
diff changeset
3441
kono
parents:
diff changeset
3442
kono
parents:
diff changeset
3443
kono
parents:
diff changeset
3444 // less-than-or-equal
kono
parents:
diff changeset
3445
kono
parents:
diff changeset
3446
kono
parents:
diff changeset
3447
kono
parents:
diff changeset
3448
kono
parents:
diff changeset
3449 // comparison : less-than -> 0
kono
parents:
diff changeset
3450
kono
parents:
diff changeset
3451
kono
parents:
diff changeset
3452
kono
parents:
diff changeset
3453
kono
parents:
diff changeset
3454 // hash function
kono
parents:
diff changeset
3455
kono
parents:
diff changeset
3456 extern unsigned int hash(GctSymbol&);
kono
parents:
diff changeset
3457
kono
parents:
diff changeset
3458
kono
parents:
diff changeset
3459
kono
parents:
diff changeset
3460 // initial capacity for structures requiring one
kono
parents:
diff changeset
3461
kono
parents:
diff changeset
3462
kono
parents:
diff changeset
3463
kono
parents:
diff changeset
3464
kono
parents:
diff changeset
3465
kono
parents:
diff changeset
3466
kono
parents:
diff changeset
3467
kono
parents:
diff changeset
3468 //# 27 "GctSymbol.GctSymbol.Map.h" 2
kono
parents:
diff changeset
3469
kono
parents:
diff changeset
3470
kono
parents:
diff changeset
3471 class GctSymbolGctSymbolMap
kono
parents:
diff changeset
3472 {
kono
parents:
diff changeset
3473 protected:
kono
parents:
diff changeset
3474 int count;
kono
parents:
diff changeset
3475 GctSymbol def;
kono
parents:
diff changeset
3476
kono
parents:
diff changeset
3477 public:
kono
parents:
diff changeset
3478 GctSymbolGctSymbolMap(GctSymbol& dflt);
kono
parents:
diff changeset
3479 virtual ~GctSymbolGctSymbolMap();
kono
parents:
diff changeset
3480
kono
parents:
diff changeset
3481 int length(); // current number of items
kono
parents:
diff changeset
3482 int empty();
kono
parents:
diff changeset
3483
kono
parents:
diff changeset
3484 virtual int contains(GctSymbol& key); // is key mapped?
kono
parents:
diff changeset
3485
kono
parents:
diff changeset
3486 virtual void clear(); // delete all items
kono
parents:
diff changeset
3487
kono
parents:
diff changeset
3488 virtual GctSymbol& operator [] (GctSymbol& key) = 0; // access contents by key
kono
parents:
diff changeset
3489
kono
parents:
diff changeset
3490 virtual void del(GctSymbol& key) = 0; // delete entry
kono
parents:
diff changeset
3491
kono
parents:
diff changeset
3492 virtual Pix first() = 0; // Pix of first item or 0
kono
parents:
diff changeset
3493 virtual void next(Pix& i) = 0; // advance to next or 0
kono
parents:
diff changeset
3494 virtual GctSymbol& key(Pix i) = 0; // access key at i
kono
parents:
diff changeset
3495 virtual GctSymbol& contents(Pix i) = 0; // access contents at i
kono
parents:
diff changeset
3496
kono
parents:
diff changeset
3497 virtual int owns(Pix i); // is i a valid Pix ?
kono
parents:
diff changeset
3498 virtual Pix seek(GctSymbol& key); // Pix of key
kono
parents:
diff changeset
3499
kono
parents:
diff changeset
3500 GctSymbol& dflt(); // access default val
kono
parents:
diff changeset
3501
kono
parents:
diff changeset
3502 void error(const char* msg);
kono
parents:
diff changeset
3503 virtual int OK() = 0; // rep invariant
kono
parents:
diff changeset
3504 };
kono
parents:
diff changeset
3505
kono
parents:
diff changeset
3506
kono
parents:
diff changeset
3507
kono
parents:
diff changeset
3508 inline GctSymbolGctSymbolMap::~GctSymbolGctSymbolMap() {}
kono
parents:
diff changeset
3509
kono
parents:
diff changeset
3510 inline int GctSymbolGctSymbolMap::length()
kono
parents:
diff changeset
3511 {
kono
parents:
diff changeset
3512 return count;
kono
parents:
diff changeset
3513 }
kono
parents:
diff changeset
3514
kono
parents:
diff changeset
3515 inline int GctSymbolGctSymbolMap::empty()
kono
parents:
diff changeset
3516 {
kono
parents:
diff changeset
3517 return count == 0;
kono
parents:
diff changeset
3518 }
kono
parents:
diff changeset
3519
kono
parents:
diff changeset
3520 inline GctSymbol& GctSymbolGctSymbolMap::dflt()
kono
parents:
diff changeset
3521 {
kono
parents:
diff changeset
3522 return def;
kono
parents:
diff changeset
3523 }
kono
parents:
diff changeset
3524
kono
parents:
diff changeset
3525 inline GctSymbolGctSymbolMap::GctSymbolGctSymbolMap(GctSymbol& dflt) :def(dflt)
kono
parents:
diff changeset
3526 {
kono
parents:
diff changeset
3527 count = 0;
kono
parents:
diff changeset
3528 }
kono
parents:
diff changeset
3529
kono
parents:
diff changeset
3530
kono
parents:
diff changeset
3531
kono
parents:
diff changeset
3532
kono
parents:
diff changeset
3533 //# 26 "GctSymbol.GctSymbol.CHMap.h" 2
kono
parents:
diff changeset
3534
kono
parents:
diff changeset
3535
kono
parents:
diff changeset
3536
kono
parents:
diff changeset
3537
kono
parents:
diff changeset
3538
kono
parents:
diff changeset
3539 struct GctSymbolGctSymbolCHNode
kono
parents:
diff changeset
3540 {
kono
parents:
diff changeset
3541 GctSymbolGctSymbolCHNode* tl;
kono
parents:
diff changeset
3542 GctSymbol hd;
kono
parents:
diff changeset
3543 GctSymbol cont;
kono
parents:
diff changeset
3544 GctSymbolGctSymbolCHNode();
kono
parents:
diff changeset
3545 GctSymbolGctSymbolCHNode(GctSymbol& h, GctSymbol& c, GctSymbolGctSymbolCHNode* t = 0);
kono
parents:
diff changeset
3546 ~GctSymbolGctSymbolCHNode();
kono
parents:
diff changeset
3547 };
kono
parents:
diff changeset
3548
kono
parents:
diff changeset
3549
kono
parents:
diff changeset
3550
kono
parents:
diff changeset
3551 inline GctSymbolGctSymbolCHNode::GctSymbolGctSymbolCHNode() {}
kono
parents:
diff changeset
3552
kono
parents:
diff changeset
3553 inline GctSymbolGctSymbolCHNode::GctSymbolGctSymbolCHNode(GctSymbol& h, GctSymbol& c, GctSymbolGctSymbolCHNode* t)
kono
parents:
diff changeset
3554 : hd(h), cont(c), tl(t) {}
kono
parents:
diff changeset
3555
kono
parents:
diff changeset
3556 inline GctSymbolGctSymbolCHNode::~GctSymbolGctSymbolCHNode() {}
kono
parents:
diff changeset
3557
kono
parents:
diff changeset
3558
kono
parents:
diff changeset
3559
kono
parents:
diff changeset
3560
kono
parents:
diff changeset
3561 typedef GctSymbolGctSymbolCHNode* GctSymbolGctSymbolCHNodePtr;
kono
parents:
diff changeset
3562
kono
parents:
diff changeset
3563
kono
parents:
diff changeset
3564
kono
parents:
diff changeset
3565
kono
parents:
diff changeset
3566 class GctSymbolGctSymbolCHMap : public GctSymbolGctSymbolMap
kono
parents:
diff changeset
3567 {
kono
parents:
diff changeset
3568 protected:
kono
parents:
diff changeset
3569 GctSymbolGctSymbolCHNode** tab;
kono
parents:
diff changeset
3570 unsigned int size;
kono
parents:
diff changeset
3571
kono
parents:
diff changeset
3572 public:
kono
parents:
diff changeset
3573 GctSymbolGctSymbolCHMap(GctSymbol& dflt,unsigned int sz=100 );
kono
parents:
diff changeset
3574 GctSymbolGctSymbolCHMap(GctSymbolGctSymbolCHMap& a);
kono
parents:
diff changeset
3575 ~GctSymbolGctSymbolCHMap();
kono
parents:
diff changeset
3576
kono
parents:
diff changeset
3577 GctSymbol& operator [] (GctSymbol& key);
kono
parents:
diff changeset
3578
kono
parents:
diff changeset
3579 void del(GctSymbol& key);
kono
parents:
diff changeset
3580
kono
parents:
diff changeset
3581 Pix first();
kono
parents:
diff changeset
3582 void next(Pix& i);
kono
parents:
diff changeset
3583 GctSymbol& key(Pix i);
kono
parents:
diff changeset
3584 GctSymbol& contents(Pix i);
kono
parents:
diff changeset
3585
kono
parents:
diff changeset
3586 Pix seek(GctSymbol& key);
kono
parents:
diff changeset
3587 int contains(GctSymbol& key);
kono
parents:
diff changeset
3588
kono
parents:
diff changeset
3589 void clear();
kono
parents:
diff changeset
3590 int OK();
kono
parents:
diff changeset
3591 };
kono
parents:
diff changeset
3592
kono
parents:
diff changeset
3593
kono
parents:
diff changeset
3594
kono
parents:
diff changeset
3595 inline GctSymbolGctSymbolCHMap::~GctSymbolGctSymbolCHMap()
kono
parents:
diff changeset
3596 {
kono
parents:
diff changeset
3597 clear();
kono
parents:
diff changeset
3598 delete tab;
kono
parents:
diff changeset
3599 }
kono
parents:
diff changeset
3600
kono
parents:
diff changeset
3601 inline int GctSymbolGctSymbolCHMap::contains(GctSymbol& key)
kono
parents:
diff changeset
3602 {
kono
parents:
diff changeset
3603 return seek(key) != 0;
kono
parents:
diff changeset
3604 }
kono
parents:
diff changeset
3605
kono
parents:
diff changeset
3606 inline GctSymbol& GctSymbolGctSymbolCHMap::key(Pix p)
kono
parents:
diff changeset
3607 {
kono
parents:
diff changeset
3608 if (p == 0) error("null Pix");
kono
parents:
diff changeset
3609 return ((GctSymbolGctSymbolCHNode*)p)->hd;
kono
parents:
diff changeset
3610 }
kono
parents:
diff changeset
3611
kono
parents:
diff changeset
3612 inline GctSymbol& GctSymbolGctSymbolCHMap::contents(Pix p)
kono
parents:
diff changeset
3613 {
kono
parents:
diff changeset
3614 if (p == 0) error("null Pix");
kono
parents:
diff changeset
3615 return ((GctSymbolGctSymbolCHNode*)p)->cont;
kono
parents:
diff changeset
3616 }
kono
parents:
diff changeset
3617
kono
parents:
diff changeset
3618
kono
parents:
diff changeset
3619
kono
parents:
diff changeset
3620
kono
parents:
diff changeset
3621 //# 22 "GctSymbol.GctSymbol.CHMap.cc" 2
kono
parents:
diff changeset
3622
kono
parents:
diff changeset
3623
kono
parents:
diff changeset
3624 // The nodes are linked together serially via a version
kono
parents:
diff changeset
3625 // of a trick used in some vtables: odd pointers are
kono
parents:
diff changeset
3626 // actually links to the next table entry.
kono
parents:
diff changeset
3627 // Not terrible, but not wonderful either
kono
parents:
diff changeset
3628
kono
parents:
diff changeset
3629 static inline int goodCHptr(GctSymbolGctSymbolCHNode* t)
kono
parents:
diff changeset
3630 {
kono
parents:
diff changeset
3631 return ((((unsigned)t) & 1) == 0);
kono
parents:
diff changeset
3632 }
kono
parents:
diff changeset
3633
kono
parents:
diff changeset
3634 static inline GctSymbolGctSymbolCHNode* index_to_CHptr(int i)
kono
parents:
diff changeset
3635 {
kono
parents:
diff changeset
3636 return (GctSymbolGctSymbolCHNode*)((i << 1) + 1);
kono
parents:
diff changeset
3637 }
kono
parents:
diff changeset
3638
kono
parents:
diff changeset
3639 static inline int CHptr_to_index(GctSymbolGctSymbolCHNode* t)
kono
parents:
diff changeset
3640 {
kono
parents:
diff changeset
3641 return ( ((unsigned) t) >> 1);
kono
parents:
diff changeset
3642 }
kono
parents:
diff changeset
3643
kono
parents:
diff changeset
3644 GctSymbolGctSymbolCHMap::GctSymbolGctSymbolCHMap(GctSymbol& dflt, unsigned int sz)
kono
parents:
diff changeset
3645 :GctSymbolGctSymbolMap(dflt)
kono
parents:
diff changeset
3646 {
kono
parents:
diff changeset
3647 tab = (GctSymbolGctSymbolCHNode**)(new GctSymbolGctSymbolCHNodePtr[size = sz]);
kono
parents:
diff changeset
3648 for (unsigned int i = 0; i < size; ++i) tab[i] = index_to_CHptr(i+1);
kono
parents:
diff changeset
3649 count = 0;
kono
parents:
diff changeset
3650 }
kono
parents:
diff changeset
3651
kono
parents:
diff changeset
3652 GctSymbolGctSymbolCHMap::GctSymbolGctSymbolCHMap(GctSymbolGctSymbolCHMap& a) :GctSymbolGctSymbolMap(a.def)
kono
parents:
diff changeset
3653 {
kono
parents:
diff changeset
3654 tab = (GctSymbolGctSymbolCHNode**)(new GctSymbolGctSymbolCHNodePtr[size = a.size]);
kono
parents:
diff changeset
3655 for (unsigned int i = 0; i < size; ++i) tab[i] = index_to_CHptr(i+1);
kono
parents:
diff changeset
3656 count = 0;
kono
parents:
diff changeset
3657 for (Pix p = a.first(); p; a.next(p)) (*this)[a.key(p)] = a.contents(p); // { dg-bogus "" } type `GctSymbol' is derived from private `String'
kono
parents:
diff changeset
3658 }