Mercurial > projects > ldc
comparison tango/example/conduits/composite.d @ 132:1700239cab2e trunk
[svn r136] MAJOR UNSTABLE UPDATE!!!
Initial commit after moving to Tango instead of Phobos.
Lots of bugfixes...
This build is not suitable for most things.
author | lindquist |
---|---|
date | Fri, 11 Jan 2008 17:57:40 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
131:5825d48b27d1 | 132:1700239cab2e |
---|---|
1 | |
2 private import tango.io.protocol.Reader, | |
3 tango.io.protocol.Writer, | |
4 tango.io.FileConduit; | |
5 | |
6 /******************************************************************************* | |
7 | |
8 Use cascading reads & writes to handle a composite class. There is | |
9 just one primary call for output, and just one for input, but the | |
10 classes propogate the request as appropriate. | |
11 | |
12 Note that the class instances don't know how their content will be | |
13 represented; that is dictated by the caller (via the reader/writer | |
14 implementation). | |
15 | |
16 Note also that this only serializes the content. To serialize the | |
17 classes too, take a look at the Pickle.d example. | |
18 | |
19 *******************************************************************************/ | |
20 | |
21 void main() | |
22 { | |
23 // define a serializable class (via interfaces) | |
24 class Wumpus : IReadable, IWritable | |
25 { | |
26 private int a = 11, | |
27 b = 112, | |
28 c = 1024; | |
29 | |
30 void read (IReader input) | |
31 { | |
32 input (a) (b) (c); | |
33 } | |
34 | |
35 void write (IWriter output) | |
36 { | |
37 output (a) (b) (c); | |
38 } | |
39 } | |
40 | |
41 | |
42 // define a serializable class (via interfaces) | |
43 class Wombat : IReadable, IWritable | |
44 { | |
45 private Wumpus wumpus; | |
46 private char[] x = "xyz"; | |
47 private bool y = true; | |
48 private float z = 3.14159; | |
49 | |
50 this (Wumpus wumpus) | |
51 { | |
52 this.wumpus = wumpus; | |
53 } | |
54 | |
55 void read (IReader input) | |
56 { | |
57 input (x) (y) (z) (wumpus); | |
58 } | |
59 | |
60 void write (IWriter output) | |
61 { | |
62 output (x) (y) (z) (wumpus); | |
63 } | |
64 } | |
65 | |
66 // construct a Wombat | |
67 auto wombat = new Wombat (new Wumpus); | |
68 | |
69 // open a file for IO | |
70 auto file = new FileConduit ("random.bin", FileConduit.ReadWriteCreate); | |
71 | |
72 // construct reader & writer upon the file, with binary IO | |
73 auto output = new Writer (file); | |
74 auto input = new Reader (file); | |
75 | |
76 // write both Wombat & Wumpus (and flush them) | |
77 output (wombat) (); | |
78 | |
79 // rewind to file start | |
80 file.seek (0); | |
81 | |
82 // read both back again | |
83 input (wombat); | |
84 } | |
85 |