annotate orange/serialization/archives/XMLArchive.d @ 34:068e853b9c07 experimental

Cleaned up. Updated to latest D2 compiler.
author Jacob Carlborg <doob@me.com>
date Mon, 01 Aug 2011 20:34:54 +0200
parents 4fea56a5849f
children 511d1ef4e299
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
1 /**
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
2 * Copyright: Copyright (c) 2010 Jacob Carlborg.
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
3 * Authors: Jacob Carlborg
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
4 * Version: Initial created: Jan 26, 2010
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
5 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
6 */
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
7 module orange.serialization.archives.XMLArchive;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
8
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
9 version (Tango)
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
10 import tango.util.Convert : to;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
11
9
99c52d46822a Serialization works now with D2, deserialization still doesn't work
Jacob Carlborg <doob@me.com>
parents: 6
diff changeset
12 else
99c52d46822a Serialization works now with D2, deserialization still doesn't work
Jacob Carlborg <doob@me.com>
parents: 6
diff changeset
13 import std.conv;
99c52d46822a Serialization works now with D2, deserialization still doesn't work
Jacob Carlborg <doob@me.com>
parents: 6
diff changeset
14
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
15 import orange.core._;
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
16 import orange.serialization.archives._;
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
17 import orange.serialization.Serializer;
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
18 import orange.util._;
9
99c52d46822a Serialization works now with D2, deserialization still doesn't work
Jacob Carlborg <doob@me.com>
parents: 6
diff changeset
19 import orange.xml.XMLDocument;
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
20
28
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
21 final class XMLArchive (U = char) : Base!(U)
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
22 {
28
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
23 private alias Archive.Id Id;
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
24
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
25 private struct Tags
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
26 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
27 static const Data structTag = "struct";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
28 static const Data dataTag = "data";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
29 static const Data archiveTag = "archive";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
30 static const Data arrayTag = "array";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
31 static const Data objectTag = "object";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
32 static const Data baseTag = "base";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
33 static const Data stringTag = "string";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
34 static const Data referenceTag = "reference";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
35 static const Data pointerTag = "pointer";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
36 static const Data associativeArrayTag = "associativeArray";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
37 static const Data typedefTag = "typedef";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
38 static const Data nullTag = "null";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
39 static const Data enumTag = "enum";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
40 static const Data sliceTag = "slice";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
41 static const Data elementTag = "element";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
42 static const Data keyTag = "key";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
43 static const Data valueTag = "value";
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
44 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
45
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
46 private struct Attributes
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
47 {
33
4fea56a5849f Now both internal and external pointers work.
Jacob Carlborg <doob@me.com>
parents: 31
diff changeset
48 static const Data invalidAttribute = "\0";
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
49 static const Data typeAttribute = "type";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
50 static const Data versionAttribute = "version";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
51 static const Data lengthAttribute = "length";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
52 static const Data keyAttribute = "key";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
53 static const Data runtimeTypeAttribute = "runtimeType";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
54 static const Data idAttribute = "id";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
55 static const Data keyTypeAttribute = "keyType";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
56 static const Data valueTypeAttribute = "valueType";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
57 static const Data offsetAttribute = "offset";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
58 static const Data baseTypeAttribute = "baseType";
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
59 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
60
29
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
61 private struct Node
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
62 {
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
63 XMLDocument!(U).Node parent;
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
64 XMLDocument!(U).Node node;
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
65 Id id;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
66 string key;
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
67 }
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
68
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
69 private
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
70 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
71 Data archiveType = "org.dsource.orange.xml";
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
72 Data archiveVersion = "1.0.0";
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
73
9
99c52d46822a Serialization works now with D2, deserialization still doesn't work
Jacob Carlborg <doob@me.com>
parents: 6
diff changeset
74 XMLDocument!(U) doc;
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
75 doc.Node lastElement;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
76
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
77 bool hasBegunArchiving;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
78 bool hasBegunUnarchiving;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
79
29
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
80 Node[Id] archivedArrays;
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
81 Node[Id] archivedPointers;
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
82 void[][Data] unarchivedSlices;
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
83 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
84
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
85 this (ErrorCallback errorCallback = null)
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
86 {
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
87 super(errorCallback);
9
99c52d46822a Serialization works now with D2, deserialization still doesn't work
Jacob Carlborg <doob@me.com>
parents: 6
diff changeset
88 doc = new XMLDocument!(U);
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
89 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
90
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
91 public void beginArchiving ()
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
92 {
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
93 if (!hasBegunArchiving)
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
94 {
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
95 doc.header;
9
99c52d46822a Serialization works now with D2, deserialization still doesn't work
Jacob Carlborg <doob@me.com>
parents: 6
diff changeset
96 lastElement = doc.tree.element(Tags.archiveTag)
99c52d46822a Serialization works now with D2, deserialization still doesn't work
Jacob Carlborg <doob@me.com>
parents: 6
diff changeset
97 .attribute(Attributes.typeAttribute, archiveType)
99c52d46822a Serialization works now with D2, deserialization still doesn't work
Jacob Carlborg <doob@me.com>
parents: 6
diff changeset
98 .attribute(Attributes.versionAttribute, archiveVersion);
99c52d46822a Serialization works now with D2, deserialization still doesn't work
Jacob Carlborg <doob@me.com>
parents: 6
diff changeset
99 lastElement = lastElement.element(Tags.dataTag);
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
100
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
101 hasBegunArchiving = true;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
102 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
103 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
104
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
105 public void beginUnarchiving (UntypedData untypedData)
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
106 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
107 auto data = cast(Data) untypedData;
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
108
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
109 if (!hasBegunUnarchiving)
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
110 {
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
111 doc.parse(data);
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
112 hasBegunUnarchiving = true;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
113
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
114 auto set = doc.query[Tags.archiveTag][Tags.dataTag];
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
115
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
116 if (set.nodes.length == 1)
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
117 lastElement = set.nodes[0];
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
118
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
119 else
18
3d42ea434d46 Added an error callback. Fixes #3 and #4.
Jacob Carlborg <doob@me.com>
parents: 11
diff changeset
120 {
3d42ea434d46 Added an error callback. Fixes #3 and #4.
Jacob Carlborg <doob@me.com>
parents: 11
diff changeset
121 if (errorCallback)
3d42ea434d46 Added an error callback. Fixes #3 and #4.
Jacob Carlborg <doob@me.com>
parents: 11
diff changeset
122 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
123 auto dataTag = to!(string)(Tags.dataTag);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
124
18
3d42ea434d46 Added an error callback. Fixes #3 and #4.
Jacob Carlborg <doob@me.com>
parents: 11
diff changeset
125 if (set.nodes.length == 0)
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
126 errorCallback(new ArchiveException(errorMessage!(ArchiveMode.unarchiving) ~ `The "` ~ to!(string)(Tags.dataTag) ~ `" tag could not be found.`, __FILE__, __LINE__), [dataTag]);
18
3d42ea434d46 Added an error callback. Fixes #3 and #4.
Jacob Carlborg <doob@me.com>
parents: 11
diff changeset
127
3d42ea434d46 Added an error callback. Fixes #3 and #4.
Jacob Carlborg <doob@me.com>
parents: 11
diff changeset
128 else
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
129 errorCallback(new ArchiveException(errorMessage!(ArchiveMode.unarchiving) ~ `There were more than one "` ~ to!(string)(Tags.dataTag) ~ `" tag.`, __FILE__, __LINE__), [dataTag]);
18
3d42ea434d46 Added an error callback. Fixes #3 and #4.
Jacob Carlborg <doob@me.com>
parents: 11
diff changeset
130 }
3d42ea434d46 Added an error callback. Fixes #3 and #4.
Jacob Carlborg <doob@me.com>
parents: 11
diff changeset
131 }
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
132 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
133 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
134
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
135 UntypedData untypedData ()
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
136 {
9
99c52d46822a Serialization works now with D2, deserialization still doesn't work
Jacob Carlborg <doob@me.com>
parents: 6
diff changeset
137 return doc.toString();
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
138 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
139
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
140 Data data ()
20
9a575087b961 Added support for slices. Strings and arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 18
diff changeset
141 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
142 return doc.toString;
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
143 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
144
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
145 void reset ()
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
146 {
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
147 hasBegunArchiving = false;
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
148 hasBegunUnarchiving = false;
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
149 doc.reset;
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
150 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
151
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
152 void archiveArray (Array array, string type, string key, Id id, void delegate () dg)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
153 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
154 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
155 internalArchiveArray(array, type, key, id, Tags.arrayTag);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
156 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
157 };
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
158 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
159
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
160 private void internalArchiveArray(Array array, string type, string key, Id id, Data tag, Data content = null)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
161 {
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
162 auto parent = lastElement;
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
163
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
164 if (array.length == 0)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
165 lastElement = lastElement.element(tag);
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
166
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
167 else
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
168 lastElement = doc.createNode(tag, content);
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
169
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
170 lastElement.attribute(Attributes.typeAttribute, toData(type))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
171 .attribute(Attributes.lengthAttribute, toData(array.length))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
172 .attribute(Attributes.keyAttribute, toData(key))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
173 .attribute(Attributes.idAttribute, toData(id));
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
174
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
175 addArchivedArray(id, parent, lastElement, key);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
176 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
177
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
178 void archiveAssociativeArray (string keyType, string valueType, size_t length, string key, Id id, void delegate () dg)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
179 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
180 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
181 lastElement = lastElement.element(Tags.associativeArrayTag)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
182 .attribute(Attributes.keyTypeAttribute, toData(keyType))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
183 .attribute(Attributes.valueTypeAttribute, toData(valueType))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
184 .attribute(Attributes.lengthAttribute, toData(length))
28
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
185 .attribute(Attributes.keyAttribute, key)
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
186 .attribute(Attributes.idAttribute, toData(id));
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
187
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
188 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
189 };
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
190 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
191
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
192 void archiveAssociativeArrayKey (string key, void delegate () dg)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
193 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
194 internalArchiveAAKeyValue(key, Tags.keyTag, dg);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
195 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
196
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
197 void archiveAssociativeArrayValue (string key, void delegate () dg)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
198 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
199 internalArchiveAAKeyValue(key, Tags.valueTag, dg);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
200 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
201
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
202 private void internalArchiveAAKeyValue (string key, Data tag, void delegate () dg)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
203 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
204 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
205 lastElement = lastElement.element(tag)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
206 .attribute(Attributes.keyAttribute, toData(key));
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
207
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
208 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
209 };
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
210 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
211
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
212 void archiveEnum (bool value, string type, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
213 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
214 internalArchiveEnum(value, type, key, id);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
215 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
216
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
217 void archiveEnum (byte value, string type, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
218 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
219 internalArchiveEnum(value, type, key, id);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
220 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
221
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
222 void archiveEnum (char value, string type, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
223 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
224 internalArchiveEnum(value, type, key, id);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
225 }
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
226
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
227 void archiveEnum (dchar value, string type, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
228 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
229 internalArchiveEnum(value, type, key, id);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
230 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
231
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
232 void archiveEnum (int value, string type, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
233 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
234 internalArchiveEnum(value, type, key, id);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
235 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
236
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
237 void archiveEnum (long value, string type, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
238 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
239 internalArchiveEnum(value, type, key, id);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
240 }
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
241
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
242 void archiveEnum (short value, string type, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
243 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
244 internalArchiveEnum(value, type, key, id);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
245 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
246
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
247 void archiveEnum (ubyte value, string type, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
248 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
249 internalArchiveEnum(value, type, key, id);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
250 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
251
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
252 void archiveEnum (uint value, string type, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
253 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
254 internalArchiveEnum(value, type, key, id);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
255 }
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
256
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
257 void archiveEnum (ulong value, string type, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
258 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
259 internalArchiveEnum(value, type, key, id);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
260 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
261
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
262 void archiveEnum (ushort value, string type, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
263 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
264 internalArchiveEnum(value, type, key, id);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
265 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
266
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
267 void archiveEnum (wchar value, string type, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
268 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
269 internalArchiveEnum(value, type, key, id);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
270 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
271
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
272 private void internalArchiveEnum (T) (T value, string type, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
273 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
274 lastElement.element(Tags.enumTag, toData(value))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
275 .attribute(Attributes.typeAttribute, toData(type))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
276 .attribute(Attributes.baseTypeAttribute, toData(T.stringof))
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
277 .attribute(Attributes.keyAttribute, toData(key))
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
278 .attribute(Attributes.idAttribute, toData(id));
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
279 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
280
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
281 void archiveBaseClass (string type, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
282 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
283 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
284 lastElement = lastElement.element(Tags.baseTag)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
285 .attribute(Attributes.typeAttribute, toData(type))
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
286 .attribute(Attributes.keyAttribute, toData(key))
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
287 .attribute(Attributes.idAttribute, toData(id));
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
288 };
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
289 }
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
290
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
291 void archiveNull (string type, string key)
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
292 {
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
293 lastElement.element(Tags.nullTag)
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
294 .attribute(Attributes.typeAttribute, toData(type))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
295 .attribute(Attributes.keyAttribute, toData(key));
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
296 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
297
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
298 void archiveObject (string runtimeType, string type, string key, Id id, void delegate () dg)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
299 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
300 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
301 lastElement = lastElement.element(Tags.objectTag)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
302 .attribute(Attributes.runtimeTypeAttribute, toData(runtimeType))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
303 .attribute(Attributes.typeAttribute, toData(type))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
304 .attribute(Attributes.keyAttribute, toData(key))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
305 .attribute(Attributes.idAttribute, toData(id));
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
306
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
307 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
308 };
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
309 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
310
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
311 void archivePointer (string key, Id id, void delegate () dg)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
312 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
313 restore(lastElement) in {
29
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
314 auto parent = lastElement;
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
315 lastElement = doc.createNode(Tags.pointerTag);
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
316
31
c68d29967c9f Fixed some bugs in the handling of pointers.
Jacob Carlborg <doob@me.com>
parents: 30
diff changeset
317 lastElement.attribute(Attributes.keyAttribute, toData(key))
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
318 .attribute(Attributes.idAttribute, toData(id));
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
319
29
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
320 addArchivedPointer(id, parent, lastElement, key);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
321 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
322 };
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
323 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
324
33
4fea56a5849f Now both internal and external pointers work.
Jacob Carlborg <doob@me.com>
parents: 31
diff changeset
325 void archivePointer (Id pointeeId, string key, Id id)
29
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
326 {
33
4fea56a5849f Now both internal and external pointers work.
Jacob Carlborg <doob@me.com>
parents: 31
diff changeset
327 if (auto pointerNode = getArchivedPointer(id))
29
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
328 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
329 pointerNode.parent.element(Tags.pointerTag)
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
330 .attribute(Attributes.keyAttribute, toData(pointerNode.key))
33
4fea56a5849f Now both internal and external pointers work.
Jacob Carlborg <doob@me.com>
parents: 31
diff changeset
331 .attribute(Attributes.idAttribute, toData(id))
4fea56a5849f Now both internal and external pointers work.
Jacob Carlborg <doob@me.com>
parents: 31
diff changeset
332 .element(Tags.referenceTag, toData(pointeeId))
4fea56a5849f Now both internal and external pointers work.
Jacob Carlborg <doob@me.com>
parents: 31
diff changeset
333 .attribute(Attributes.keyAttribute, toData(key));
29
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
334 }
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
335 }
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
336
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
337 void archiveReference (string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
338 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
339 lastElement.element(Tags.referenceTag, toData(id))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
340 .attribute(Attributes.keyAttribute, toData(key));
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
341 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
342
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
343 void archiveSlice (Slice slice, Id sliceId, Id arrayId)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
344 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
345 if (auto sliceNode = getArchivedArray(sliceId))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
346 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
347 if (auto arrayNode = getArchivedArray(arrayId))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
348 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
349 sliceNode.parent.element(Tags.sliceTag, toData(arrayNode.id))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
350 .attribute(Attributes.keyAttribute, toData(sliceNode.key))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
351 .attribute(Attributes.offsetAttribute, toData(slice.offset))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
352 .attribute(Attributes.lengthAttribute, toData(slice.length));
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
353 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
354 }
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
355 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
356
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
357 void archiveStruct (string type, string key, Id id, void delegate () dg)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
358 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
359 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
360 lastElement = lastElement.element(Tags.structTag)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
361 .attribute(Attributes.typeAttribute, toData(type))
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
362 .attribute(Attributes.keyAttribute, toData(key))
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
363 .attribute(Attributes.idAttribute, toData(id));
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
364
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
365 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
366 };
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
367 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
368
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
369 void archiveTypedef (string type, string key, Id id, void delegate () dg)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
370 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
371 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
372 lastElement = lastElement.element(Tags.typedefTag)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
373 .attribute(Attributes.typeAttribute, toData(type))
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
374 .attribute(Attributes.keyAttribute, toData(key))
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
375 .attribute(Attributes.idAttribute, toData(id));
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
376
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
377 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
378 };
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
379 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
380
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
381 void archive (string value, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
382 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
383 archiveString(value, key, id);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
384 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
385
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
386 void archive (wstring value, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
387 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
388 archiveString(value, key, id);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
389 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
390
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
391 void archive (dstring value, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
392 {
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
393 archiveString(value, key, id);
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
394 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
395
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
396 private void archiveString (T) (T value, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
397 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
398 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
399 alias ElementTypeOfArray!(T) ElementType;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
400 auto array = Array(value.ptr, value.length, ElementType.sizeof);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
401
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
402 internalArchiveArray(array, ElementType.stringof, key, id, Tags.stringTag, toData(value));
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
403 };
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
404 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
405
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
406 void archive (bool value, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
407 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
408 archivePrimitive(value, key, id);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
409 }
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
410
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
411 void archive (byte value, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
412 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
413 archivePrimitive(value, key, id);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
414 }
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
415
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
416 //currently not suppported by to!()
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
417 /*void archive (cdouble value, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
418 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
419 archivePrimitive(value, key, id);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
420 }*/
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
421
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
422 //currently not implemented but a reserved keyword
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
423 /*void archive (cent value, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
424 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
425 archivePrimitive(value, key, id);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
426 }*/
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
427
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
428 //currently not suppported by to!()
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
429 /*void archive (cfloat value, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
430 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
431 archivePrimitive(value, key, id);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
432 }*/
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
433
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
434 void archive (char value, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
435 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
436 archivePrimitive(value, key, id);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
437 }
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
438
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
439 //currently not suppported by to!()
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
440 /*void archive (creal value, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
441 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
442 archivePrimitive(value, key, id);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
443 }*/
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
444
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
445 void archive (dchar value, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
446 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
447 archivePrimitive(value, key, id);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
448 }
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
449
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
450 void archive (double value, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
451 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
452 archivePrimitive(value, key, id);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
453 }
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
454
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
455 void archive (float value, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
456 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
457 archivePrimitive(value, key, id);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
458 }
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
459
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
460 //currently not suppported by to!()
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
461 /*void archive (idouble value, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
462 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
463 archivePrimitive(value, key, id);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
464 }*/
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
465
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
466 //currently not suppported by to!()
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
467 /*void archive (ifloat value, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
468 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
469 archivePrimitive(value, key, id);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
470 }*/
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
471
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
472 void archive (int value, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
473 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
474 archivePrimitive(value, key, id);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
475 }
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
476
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
477 //currently not suppported by to!()
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
478 /*void archive (ireal value, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
479 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
480 archivePrimitive(value, key, id);
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
481 }*/
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
482
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
483 void archive (long value, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
484 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
485 archivePrimitive(value, key, id);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
486 }
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
487
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
488 void archive (real value, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
489 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
490 archivePrimitive(value, key, id);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
491 }
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
492
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
493 void archive (short value, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
494 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
495 archivePrimitive(value, key, id);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
496 }
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
497
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
498 void archive (ubyte value, string key, Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
499 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
500 archivePrimitive(value, key, id);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
501 }
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
502
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
503 //currently not implemented but a reserved keyword
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
504 /*void archive (ucent value, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
505 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
506 archivePrimitive(value, key, id);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
507 }*/
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
508
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
509 void archive (uint value, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
510 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
511 archivePrimitive(value, key, id);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
512 }
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
513
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
514 void archive (ulong value, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
515 {
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
516 archivePrimitive(value, key, id);
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
517 }
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
518
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
519 void archive (ushort value, string key, Id id)
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
520 {
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
521 archivePrimitive(value, key, id);
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
522 }
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
523
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
524 void archive (wchar value, string key, Id id)
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
525 {
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
526 archivePrimitive(value, key, id);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
527 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
528
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
529 private void archivePrimitive (T) (T value, string key, Id id)
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
530 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
531 lastElement.element(toData(T.stringof), toData(value))
30
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
532 .attribute(Attributes.keyAttribute, toData(key))
9d1a8023bb89 Added IDs to every serialized value.
Jacob Carlborg <doob@me.com>
parents: 29
diff changeset
533 .attribute(Attributes.idAttribute, toData(id));
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
534 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
535
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
536 Id unarchiveArray (string key, void delegate (size_t) dg)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
537 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
538 return restore!(Id)(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
539 auto element = getElement(Tags.arrayTag, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
540
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
541 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
542 return Id.max;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
543
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
544 lastElement = element;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
545 auto len = getValueOfAttribute(Attributes.lengthAttribute);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
546
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
547 if (!len)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
548 return Id.max;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
549
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
550 auto length = fromData!(size_t)(len);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
551 auto id = getValueOfAttribute(Attributes.idAttribute);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
552
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
553 if (!id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
554 return Id.max;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
555
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
556 dg(length);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
557
34
068e853b9c07 Cleaned up. Updated to latest D2 compiler.
Jacob Carlborg <doob@me.com>
parents: 33
diff changeset
558 return toId(id);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
559 };
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
560 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
561
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
562 void unarchiveArray (Id id, void delegate (size_t) dg)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
563 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
564 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
565 auto element = getElement(Tags.arrayTag, to!(string)(id), Attributes.idAttribute);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
566
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
567 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
568 return;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
569
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
570 lastElement = element;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
571 auto len = getValueOfAttribute(Attributes.lengthAttribute);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
572
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
573 if (!len)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
574 return;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
575
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
576 auto length = fromData!(size_t)(len);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
577 auto stringId = getValueOfAttribute(Attributes.idAttribute);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
578
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
579 if (!stringId)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
580 return;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
581
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
582 dg(length);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
583 };
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
584 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
585
28
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
586 Id unarchiveAssociativeArray (string key, void delegate (size_t length) dg)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
587 {
28
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
588 return restore!(Id)(lastElement) in {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
589 auto element = getElement(Tags.associativeArrayTag, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
590
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
591 if (!element.isValid)
28
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
592 return Id.max;
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
593
28
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
594 lastElement = element;
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
595 auto len = getValueOfAttribute(Attributes.lengthAttribute);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
596
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
597 if (!len)
28
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
598 return Id.max;
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
599
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
600 auto length = fromData!(size_t)(len);
28
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
601 auto id = getValueOfAttribute(Attributes.idAttribute);
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
602
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
603 if (!id)
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
604 return Id.max;
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
605
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
606 dg(length);
28
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
607
34
068e853b9c07 Cleaned up. Updated to latest D2 compiler.
Jacob Carlborg <doob@me.com>
parents: 33
diff changeset
608 return toId(id);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
609 };
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
610 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
611
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
612 void unarchiveAssociativeArrayKey (string key, void delegate () dg)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
613 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
614 internalUnarchiveAAKeyValue(key, Tags.keyTag, dg);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
615 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
616
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
617 void unarchiveAssociativeArrayValue (string key, void delegate () dg)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
618 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
619 internalUnarchiveAAKeyValue(key, Tags.valueTag, dg);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
620 }
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
621
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
622 private void internalUnarchiveAAKeyValue (string key, Data tag, void delegate () dg)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
623 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
624 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
625 auto element = getElement(tag, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
626
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
627 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
628 return;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
629
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
630 lastElement = element;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
631
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
632 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
633 };
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
634 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
635
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
636 bool unarchiveEnumBool (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
637 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
638 return unarchiveEnum!(bool)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
639 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
640
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
641 byte unarchiveEnumByte (string key)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
642 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
643 return unarchiveEnum!(byte)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
644 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
645
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
646 char unarchiveEnumChar (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
647 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
648 return unarchiveEnum!(char)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
649 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
650
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
651 dchar unarchiveEnumDchar (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
652 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
653 return unarchiveEnum!(dchar)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
654 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
655
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
656 int unarchiveEnumInt (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
657 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
658 return unarchiveEnum!(int)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
659 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
660
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
661 long unarchiveEnumLong (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
662 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
663 return unarchiveEnum!(long)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
664 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
665
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
666 short unarchiveEnumShort (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
667 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
668 return unarchiveEnum!(short)(key);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
669 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
670
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
671 ubyte unarchiveEnumUbyte (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
672 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
673 return unarchiveEnum!(ubyte)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
674 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
675
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
676 uint unarchiveEnumUint (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
677 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
678 return unarchiveEnum!(uint)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
679 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
680
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
681 ulong unarchiveEnumUlong (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
682 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
683 return unarchiveEnum!(ulong)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
684 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
685
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
686 ushort unarchiveEnumUshort (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
687 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
688 return unarchiveEnum!(ushort)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
689 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
690
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
691 wchar unarchiveEnumWchar (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
692 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
693 return unarchiveEnum!(wchar)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
694 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
695
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
696 private T unarchiveEnum (T) (string key)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
697 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
698 auto element = getElement(Tags.enumTag, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
699
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
700 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
701 return T.init;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
702
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
703 return fromData!(T)(element.value);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
704 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
705
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
706 void unarchiveObject (string key, out Id id, out Object result, void delegate () dg)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
707 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
708 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
709 auto tmp = getElement(Tags.objectTag, key, Attributes.keyAttribute, false);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
710
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
711 if (!tmp.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
712 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
713 lastElement = getElement(Tags.nullTag, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
714 return;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
715 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
716
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
717 lastElement = tmp;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
718
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
719 auto runtimeType = getValueOfAttribute(Attributes.runtimeTypeAttribute);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
720
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
721 if (!runtimeType)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
722 return;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
723
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
724 auto name = fromData!(string)(runtimeType);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
725 auto stringId = getValueOfAttribute(Attributes.idAttribute);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
726
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
727 if (!stringId)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
728 return;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
729
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
730 id = stringId.toId();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
731 result = newInstance(name);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
732 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
733 };
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
734 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
735
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
736 Id unarchivePointer (string key, void delegate () dg)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
737 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
738 return restore!(Id)(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
739 auto tmp = getElement(Tags.pointerTag, key, Attributes.keyAttribute, false);
33
4fea56a5849f Now both internal and external pointers work.
Jacob Carlborg <doob@me.com>
parents: 31
diff changeset
740
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
741 if (!tmp.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
742 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
743 lastElement = getElement(Tags.nullTag, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
744 return Id.max;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
745 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
746
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
747 lastElement = tmp;
33
4fea56a5849f Now both internal and external pointers work.
Jacob Carlborg <doob@me.com>
parents: 31
diff changeset
748 auto id = getValueOfAttribute(Attributes.idAttribute);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
749
33
4fea56a5849f Now both internal and external pointers work.
Jacob Carlborg <doob@me.com>
parents: 31
diff changeset
750 if (!id)
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
751 return Id.max;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
752
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
753 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
754
33
4fea56a5849f Now both internal and external pointers work.
Jacob Carlborg <doob@me.com>
parents: 31
diff changeset
755 return id.toId();
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
756 };
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
757 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
758
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
759 Id unarchiveReference (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
760 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
761 auto element = getElement(Tags.referenceTag, key, Attributes.keyAttribute, false);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
762
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
763 if (element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
764 return toId(element.value);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
765
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
766 return Id.max;
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
767 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
768
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
769 Slice unarchiveSlice (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
770 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
771 auto element = getElement(Tags.sliceTag, key, Attributes.keyAttribute, false);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
772
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
773 if (element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
774 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
775 auto length = fromData!(size_t)(getValueOfAttribute(Attributes.lengthAttribute, element));
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
776 auto offset = fromData!(size_t)(getValueOfAttribute(Attributes.offsetAttribute, element));
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
777 auto id = toId(element.value);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
778
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
779 return Slice(length, offset, id);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
780 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
781
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
782 return Slice.init;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
783 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
784
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
785 void unarchiveStruct (string key, void delegate () dg)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
786 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
787 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
788 auto element = getElement(Tags.structTag, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
789
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
790 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
791 return;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
792
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
793 lastElement = element;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
794 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
795 };
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
796 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
797
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
798 private T unarchiveTypeDef (T) (DataType key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
799 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
800 auto element = getElement(Tags.typedefTag, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
801
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
802 if (element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
803 lastElement = element;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
804
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
805 return T.init;
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
806 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
807
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
808 void unarchiveTypedef (string key, void delegate () dg)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
809 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
810 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
811 auto element = getElement(Tags.typedefTag, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
812
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
813 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
814 return;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
815
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
816 lastElement = element;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
817 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
818 };
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
819 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
820
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
821 string unarchiveString (string key, out Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
822 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
823 return internalUnarchiveString!(string)(key, id);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
824 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
825
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
826 wstring unarchiveWstring (string key, out Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
827 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
828 return internalUnarchiveString!(wstring)(key, id);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
829 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
830
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
831 dstring unarchiveDstring (string key, out Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
832 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
833 return internalUnarchiveString!(dstring)(key, id);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
834 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
835
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
836 private T internalUnarchiveString (T) (string key, out Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
837 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
838 auto element = getElement(Tags.stringTag, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
839
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
840 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
841 return T.init;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
842
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
843 auto value = fromData!(T)(element.value);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
844 auto stringId = getValueOfAttribute(Attributes.idAttribute, element);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
845
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
846 if (!stringId)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
847 return T.init;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
848
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
849 id = stringId.toId();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
850 return value;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
851 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
852
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
853 string unarchiveString (Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
854 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
855 return internalUnarchiveString!(string)(id);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
856 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
857
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
858 wstring unarchiveWstring (Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
859 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
860 return internalUnarchiveString!(wstring)(id);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
861 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
862
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
863 dstring unarchiveDstring (Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
864 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
865 return internalUnarchiveString!(dstring)(id);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
866 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
867
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
868 private T internalUnarchiveString (T) (Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
869 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
870 auto element = getElement(Tags.stringTag, to!(string)(id), Attributes.idAttribute);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
871
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
872 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
873 return T.init;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
874
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
875 return fromData!(T)(element.value);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
876 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
877
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
878 bool unarchiveBool (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
879 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
880 return unarchivePrimitive!(bool)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
881 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
882
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
883 byte unarchiveByte (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
884 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
885 return unarchivePrimitive!(byte)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
886 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
887
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
888 //currently not suppported by to!()
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
889 /*cdouble unarchiveCdouble (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
890 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
891 return unarchivePrimitive!(cdouble)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
892 }*/
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
893
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
894 //currently not implemented but a reserved keyword
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
895 /*cent unarchiveCent (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
896 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
897 return unarchivePrimitive!(cent)(key);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
898 }*/
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
899
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
900 // currently not suppported by to!()
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
901 /*cfloat unarchiveCfloat (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
902 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
903 return unarchivePrimitive!(cfloat)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
904 }*/
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
905
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
906 char unarchiveChar (string key)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
907 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
908 return unarchivePrimitive!(char)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
909 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
910
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
911 //currently not implemented but a reserved keyword
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
912 /*creal unarchiveCreal (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
913 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
914 return unarchivePrimitive!(creal)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
915 }*/
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
916
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
917 dchar unarchiveDchar (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
918 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
919 return unarchivePrimitive!(dchar)(key);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
920 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
921
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
922 double unarchiveDouble (string key)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
923 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
924 return unarchivePrimitive!(double)(key);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
925 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
926
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
927 float unarchiveFloat (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
928 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
929 return unarchivePrimitive!(float)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
930 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
931
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
932 //currently not suppported by to!()
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
933 /*idouble unarchiveIdouble (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
934 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
935 return unarchivePrimitive!(idouble)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
936 }*/
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
937
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
938 // currently not suppported by to!()*/
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
939 /*ifloat unarchiveIfloat (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
940 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
941 return unarchivePrimitive!(ifloat)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
942 }*/
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
943
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
944 int unarchiveInt (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
945 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
946 return unarchivePrimitive!(int)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
947 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
948
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
949 // currently not suppported by to!()
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
950 /*ireal unarchiveIreal (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
951 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
952 return unarchivePrimitive!(ireal)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
953 }*/
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
954
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
955 long unarchiveLong (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
956 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
957 return unarchivePrimitive!(long)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
958 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
959
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
960 real unarchiveReal (string key)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
961 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
962 return unarchivePrimitive!(real)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
963 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
964
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
965 short unarchiveShort (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
966 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
967 return unarchivePrimitive!(short)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
968 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
969
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
970 ubyte unarchiveUbyte (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
971 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
972 return unarchivePrimitive!(ubyte)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
973 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
974
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
975 // currently not implemented but a reserved keyword
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
976 /*ucent unarchiveCcent (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
977 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
978 return unarchivePrimitive!(ucent)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
979 }*/
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
980
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
981 uint unarchiveUint (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
982 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
983 return unarchivePrimitive!(uint)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
984 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
985
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
986 ulong unarchiveUlong (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
987 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
988 return unarchivePrimitive!(ulong)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
989 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
990
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
991 ushort unarchiveUshort (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
992 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
993 return unarchivePrimitive!(ushort)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
994 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
995
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
996 wchar unarchiveWchar (string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
997 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
998 return unarchivePrimitive!(wchar)(key);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
999 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
1000
34
068e853b9c07 Cleaned up. Updated to latest D2 compiler.
Jacob Carlborg <doob@me.com>
parents: 33
diff changeset
1001 T unarchivePrimitive (T) (string key)
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1002 {
34
068e853b9c07 Cleaned up. Updated to latest D2 compiler.
Jacob Carlborg <doob@me.com>
parents: 33
diff changeset
1003 auto element = getElement(toData(T.stringof), key);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1004
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1005 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1006 return T.init;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1007
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1008 return fromData!(T)(element.value);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1009 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1010
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1011 void postProcessArray (Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
1012 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1013 if (auto array = getArchivedArray(id))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1014 array.parent.attach(array.node);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1015 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1016
29
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1017 void postProcessPointer (Id id)
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1018 {
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1019 if (auto pointer = getArchivedPointer(id))
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1020 pointer.parent.attach(pointer.node);
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1021 }
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1022
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1023 private void addArchivedArray (Id id, doc.Node parent, doc.Node element, string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1024 {
29
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1025 archivedArrays[id] = Node(parent, element, id, key);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1026 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1027
29
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1028 private Node* getArchivedArray (Id id)
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1029 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1030 if (auto array = id in archivedArrays)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1031 return array;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1032
29
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1033 if (errorCallback)
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1034 errorCallback(new ArchiveException(`Could not continue archiving due to no array with the Id "` ~ to!(string)(id) ~ `" was found.`, __FILE__, __LINE__), [to!(string)(id)]);
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1035
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1036 return null;
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1037 }
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1038
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1039 private void addArchivedPointer (Id id, doc.Node parent, doc.Node element, string key)
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1040 {
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1041 archivedPointers[id] = Node(parent, element, id, key);
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1042 }
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1043
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1044 private Node* getArchivedPointer (Id id)
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1045 {
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1046 if (auto pointer = id in archivedPointers)
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1047 return pointer;
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1048
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1049 if (errorCallback)
c422ff6477dd Better handling of serializing pointers.
Jacob Carlborg <doob@me.com>
parents: 28
diff changeset
1050 errorCallback(new ArchiveException(`Could not continue archiving due to no pointer with the Id "` ~ to!(string)(id) ~ `" was found.`, __FILE__, __LINE__), [to!(string)(id)]);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1051
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1052 return null;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1053 }
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
1054
34
068e853b9c07 Cleaned up. Updated to latest D2 compiler.
Jacob Carlborg <doob@me.com>
parents: 33
diff changeset
1055 private doc.Node getElement (Data tag, string key, Data attribute = Attributes.keyAttribute, bool throwOnError = true)
068e853b9c07 Cleaned up. Updated to latest D2 compiler.
Jacob Carlborg <doob@me.com>
parents: 33
diff changeset
1056 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1057 auto set = lastElement.query[tag].attribute((doc.Node node) {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1058 if (node.name == attribute && node.value == key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1059 return true;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1060
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1061 return false;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1062 });
33
4fea56a5849f Now both internal and external pointers work.
Jacob Carlborg <doob@me.com>
parents: 31
diff changeset
1063
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1064 if (set.nodes.length == 1)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1065 return set.nodes[0].parent;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1066
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1067 else
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1068 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1069 if (throwOnError && errorCallback)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1070 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1071 if (set.nodes.length == 0)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1072 errorCallback(new ArchiveException(`Could not find an element "` ~ to!(string)(tag) ~ `" with the attribute "` ~ to!(string)(Attributes.keyAttribute) ~ `" with the value "` ~ to!(string)(key) ~ `".`, __FILE__, __LINE__), [tag, Attributes.keyAttribute, key]);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1073
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1074 else
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1075 errorCallback(new ArchiveException(`Could not unarchive the value with the key "` ~ to!(string)(key) ~ `" due to malformed data.`, __FILE__, __LINE__), [tag, Attributes.keyAttribute, key]);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1076 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1077
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1078 return doc.Node.invalid;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1079 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1080 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1081
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1082 private Data getValueOfAttribute (Data attribute, doc.Node element = doc.Node.invalid)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
1083 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1084 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1085 element = lastElement;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1086
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1087 auto set = element.query.attribute(attribute);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1088
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1089 if (set.nodes.length == 1)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1090 return set.nodes[0].value;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1091
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1092 else
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1093 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1094 if (errorCallback)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1095 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1096 if (set.nodes.length == 0)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1097 errorCallback(new ArchiveException(`Could not find the attribute "` ~ to!(string)(attribute) ~ `".`, __FILE__, __LINE__), [attribute]);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1098
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1099 else
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1100 errorCallback(new ArchiveException(`Could not unarchive the value of the attribute "` ~ to!(string)(attribute) ~ `" due to malformed data.`, __FILE__, __LINE__), [attribute]);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1101 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1102 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1103
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1104 return null;
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
1105 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
1106
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1107 version (Tango)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
1108 {
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1109 private template errorMessage (ArchiveMode mode = ArchiveMode.archiving)
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1110 {
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1111 static if (mode == ArchiveMode.archiving)
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1112 const errorMessage = "Could not continue archiving due to unrecognized data format: ";
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1113
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1114 else static if (mode == ArchiveMode.unarchiving)
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1115 const errorMessage = "Could not continue unarchiving due to unrecognized data format: ";
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1116 }
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1117 }
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1118
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1119 else
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1120 {
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1121 mixin(
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1122 `private template errorMessage (ArchiveMode mode = ArchiveMode.archiving)
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1123 {
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1124 static if (mode == ArchiveMode.archiving)
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1125 enum errorMessage = "Could not continue archiving due to unrecognized data format: ";
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1126
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1127 else static if (mode == ArchiveMode.unarchiving)
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1128 enum errorMessage = "Could not continue unarchiving due to unrecognized data format: ";
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1129 }`
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1130 );
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1131 }
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
1132 }