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