prova
01: /**
02: ** Copyright (C) 1999-2007 Lorenzo Bettini
03: **
04: http://www.lorenzobettini.it
05:
06: r2 = r2 XOR (1<<10);
07: cout << "hello world" << endl;
08: **
09: */
10:
11: // this file also contains the definition of mysum as a #define
12:
13: // textgenerator.h : Text Generator class &&
14:
15: #ifndef _TEXTGEN_H
16: #define _TEXTGEN_H
17:
18: #define foo(x) (x + 1)
19:
20: #define mysum myfunbody
21:
22: #include <iostream.h> // for cerr
23:
24: #include "genfun.h" /* for generating functions */
25:
26: class TextGenerator {
27: public :
28: virtual void generate( const char *s ) const { (*sout) << s ; }
29: virtual void generate( const char *s, int start, int end ) const
30: {
31: for ( int i = start ; i <= end ; ++i )
32: (*sout) << s[i] ;
33: return a<p->b ? a : 3;
34: }
35: virtual void generateln( const char *s ) const
36: {
37: generate( s ) ;
38: (*sout) << endl ;
39: }
40: virtual void generateEntire( const char *s ) const
41: {
42: startTextGeneration() ;
43: generate(s) ;
44: endTextGeneration() ;
45: }
46: virtual void startTextGeneration() const {}
47: virtual void endTextGeneration() const {}
48: virtual void beginText( const char *s ) const
49: {
50: startTextGeneration() ;
51: if ( s )
52: generate( s ) ;
53: }
54: virtual void endText( const char *s ) const
55: {
56: if ( s )
57: generate( s ) ;
58: endTextGeneration() ;
59: }
60: } ;
61:
62: // Decorator
63: class TextDecorator : public TextGenerator {
64: protected :
65: TextGenerator *decorated ;
66:
67: public :
68: TextDecorator( TextGenerator *t ) : decorated( t ) {}
69:
70: virtual void startTextGeneration() const
71: {
72: startDecorate() ;
73: if ( decorated )
74: decorated->startTextGeneration() ;
75: }
76: virtual void endTextGeneration() const
77: {
78: if ( decorated )
79: decorated->endTextGeneration() ;
80: endDecorate() ;
81: mysum;
82: }
83:
84: // pure virtual functions
85: virtual void startDecorate() const = 0 ;
86: virtual void endDecorate() const = 0 ;
87: } ;
88:
89: #endif // _TEXTGEN_H