Mercurial > projects > orange
comparison orange/serialization/RegisterWrapper.d @ 0:f7b078e85f7f
First commit
author | Jacob Carlborg <doob@me.com> |
---|---|
date | Wed, 26 May 2010 17:19:13 +0200 |
parents | |
children | 470ab5270d0c |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f7b078e85f7f |
---|---|
1 /** | |
2 * Copyright: Copyright (c) 2010 Jacob Carlborg. | |
3 * Authors: Jacob Carlborg | |
4 * Version: Initial created: Feb 4, 2010 | |
5 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) | |
6 */ | |
7 module orange.serialization.RegisterWrapper; | |
8 | |
9 import orange.serialization.archives.Archive; | |
10 import orange.serialization.Serializer; | |
11 | |
12 class RegisterBase | |
13 { | |
14 | |
15 } | |
16 | |
17 class SerializeRegisterWrapper (T, ArchiveType : IArchive) : RegisterBase | |
18 { | |
19 private alias Serializer!(ArchiveType) SerializerType; | |
20 private alias SerializerType.DataType DataType; | |
21 private void delegate (T, SerializerType, DataType) dg; | |
22 private void function (T, SerializerType, DataType) func; | |
23 | |
24 this (void delegate (T, SerializerType, DataType) dg) | |
25 { | |
26 this.dg = dg; | |
27 } | |
28 | |
29 this (void function (T, SerializerType, DataType) func) | |
30 { | |
31 this.func = func; | |
32 } | |
33 | |
34 void opCall (T value, SerializerType archive, DataType key) | |
35 { | |
36 if (dg) | |
37 dg(value, archive, key); | |
38 | |
39 else if (func) | |
40 func(value, archive, key); | |
41 } | |
42 } | |
43 | |
44 class DeserializeRegisterWrapper (T, ArchiveType : IArchive) : RegisterBase | |
45 { | |
46 private alias Serializer!(ArchiveType) SerializerType; | |
47 private alias SerializerType.DataType DataType; | |
48 private void delegate (ref T, SerializerType, DataType) dg; | |
49 private void function (ref T, SerializerType, DataType) func; | |
50 | |
51 this (void delegate (ref T, SerializerType, DataType) dg) | |
52 { | |
53 this.dg = dg; | |
54 } | |
55 | |
56 this (void function (ref T, SerializerType, DataType) func) | |
57 { | |
58 this.func = func; | |
59 } | |
60 | |
61 void opCall (ref T value, SerializerType archive, DataType key) | |
62 { | |
63 if (dg) | |
64 dg(value, archive, key); | |
65 | |
66 if (func) | |
67 func(value, archive, key); | |
68 } | |
69 } |