annotate orange/serialization/archives/XMLArchive.d @ 28:bffcbc8c392b experimental

Associative arrays are now treated as references.
author Jacob Carlborg <doob@me.com>
date Fri, 19 Nov 2010 11:55:04 +0100
parents 78e5fef4bbf2
children c422ff6477dd
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 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
48 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
49 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
50 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
51 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
52 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
53 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
54 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
55 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
56 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
57 static const Data baseTypeAttribute = "baseType";
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
58 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
59
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
60 private struct ArrayNode
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
61 {
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
62 XMLDocument!(U).Node parent;
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
63 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
64 Id id;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
65 string key;
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
66 }
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
67
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
68 private
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
69 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
70 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
71 Data archiveVersion = "1.0.0";
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
72
9
99c52d46822a Serialization works now with D2, deserialization still doesn't work
Jacob Carlborg <doob@me.com>
parents: 6
diff changeset
73 XMLDocument!(U) doc;
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
74 doc.Node lastElement;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
75
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
76 bool hasBegunArchiving;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
77 bool hasBegunUnarchiving;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
78
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
79 ArrayNode[Id] archivedArrays;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
80 void[][Data] unarchivedSlices;
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
81 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
82
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
83 this (ErrorCallback errorCallback = null)
0
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 super(errorCallback);
9
99c52d46822a Serialization works now with D2, deserialization still doesn't work
Jacob Carlborg <doob@me.com>
parents: 6
diff changeset
86 doc = new XMLDocument!(U);
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
87 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
88
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
89 public void beginArchiving ()
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
90 {
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
91 if (!hasBegunArchiving)
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
92 {
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
93 doc.header;
9
99c52d46822a Serialization works now with D2, deserialization still doesn't work
Jacob Carlborg <doob@me.com>
parents: 6
diff changeset
94 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
95 .attribute(Attributes.typeAttribute, archiveType)
99c52d46822a Serialization works now with D2, deserialization still doesn't work
Jacob Carlborg <doob@me.com>
parents: 6
diff changeset
96 .attribute(Attributes.versionAttribute, archiveVersion);
99c52d46822a Serialization works now with D2, deserialization still doesn't work
Jacob Carlborg <doob@me.com>
parents: 6
diff changeset
97 lastElement = lastElement.element(Tags.dataTag);
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
98
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
99 hasBegunArchiving = true;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
100 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
101 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
102
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
103 public void beginUnarchiving (UntypedData untypedData)
0
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 auto data = cast(Data) untypedData;
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
106
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
107 if (!hasBegunUnarchiving)
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
108 {
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
109 doc.parse(data);
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
110 hasBegunUnarchiving = true;
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
111
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
112 auto set = doc.query[Tags.archiveTag][Tags.dataTag];
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
113
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
114 if (set.nodes.length == 1)
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
115 lastElement = set.nodes[0];
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
116
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
117 else
18
3d42ea434d46 Added an error callback. Fixes #3 and #4.
Jacob Carlborg <doob@me.com>
parents: 11
diff changeset
118 {
3d42ea434d46 Added an error callback. Fixes #3 and #4.
Jacob Carlborg <doob@me.com>
parents: 11
diff changeset
119 if (errorCallback)
3d42ea434d46 Added an error callback. Fixes #3 and #4.
Jacob Carlborg <doob@me.com>
parents: 11
diff changeset
120 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
121 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
122
18
3d42ea434d46 Added an error callback. Fixes #3 and #4.
Jacob Carlborg <doob@me.com>
parents: 11
diff changeset
123 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
124 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
125
3d42ea434d46 Added an error callback. Fixes #3 and #4.
Jacob Carlborg <doob@me.com>
parents: 11
diff changeset
126 else
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
127 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
128 }
3d42ea434d46 Added an error callback. Fixes #3 and #4.
Jacob Carlborg <doob@me.com>
parents: 11
diff changeset
129 }
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
130 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
131 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
132
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
133 UntypedData untypedData ()
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
134 {
9
99c52d46822a Serialization works now with D2, deserialization still doesn't work
Jacob Carlborg <doob@me.com>
parents: 6
diff changeset
135 return doc.toString();
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
136 }
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
137
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
138 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
139 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
140 return doc.toString;
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
141 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
142
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
143 void reset ()
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 hasBegunArchiving = false;
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
146 hasBegunUnarchiving = false;
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
147 doc.reset;
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
148 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
149
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
150 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
151 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
152 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
153 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
154 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
155 };
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
156 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
157
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
158 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
159 {
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
160 auto parent = lastElement;
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
161
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
162 if (array.length == 0)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
163 lastElement = lastElement.element(tag);
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
164
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
165 else
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
166 lastElement = doc.createNode(tag, content);
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
167
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
168 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
169 .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
170 .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
171 .attribute(Attributes.idAttribute, toData(id));
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
172
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
173 addArchivedArray(id, parent, lastElement, key);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
174 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
175
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
176 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
177 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
178 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
179 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
180 .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
181 .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
182 .attribute(Attributes.lengthAttribute, toData(length))
28
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
183 .attribute(Attributes.keyAttribute, key)
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
184 .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
185
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
186 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
187 };
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
188 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
189
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
190 void archiveAssociativeArrayKey (string key, void delegate () dg)
24
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 internalArchiveAAKeyValue(key, Tags.keyTag, dg);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
193 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
194
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
195 void archiveAssociativeArrayValue (string key, void delegate () dg)
24
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 internalArchiveAAKeyValue(key, Tags.valueTag, dg);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
198 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
199
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
200 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
201 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
202 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
203 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
204 .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
205
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
206 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
207 };
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
208 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
209
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
210 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
211 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
212 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
213 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
214
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
215 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
216 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
217 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
218 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
219
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
220 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
221 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
222 internalArchiveEnum(value, type, key, id);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
223 }
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
224
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
225 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
226 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
227 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
228 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
229
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
230 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
231 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
232 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
233 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
234
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
235 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
236 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
237 internalArchiveEnum(value, type, key, id);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
238 }
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
239
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
240 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
241 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
242 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
243 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
244
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
245 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
246 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
247 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
248 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
249
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
250 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
251 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
252 internalArchiveEnum(value, type, key, id);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
253 }
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
254
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
255 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
256 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
257 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
258 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
259
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
260 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
261 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
262 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
263 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
264
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
265 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
266 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
267 internalArchiveEnum(value, type, key, id);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
268 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
269
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
270 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
271 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
272 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
273 .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
274 .attribute(Attributes.baseTypeAttribute, toData(T.stringof))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
275 .attribute(Attributes.keyAttribute, toData(key));
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
276 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
277
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
278 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
279 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
280 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
281 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
282 .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
283 .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
284 };
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
285 }
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
286
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
287 void archiveNull (string type, string key)
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
288 {
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
289 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
290 .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
291 .attribute(Attributes.keyAttribute, toData(key));
24
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
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
294 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
295 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
296 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
297 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
298 .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
299 .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
300 .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
301 .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
302
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
303 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
304 };
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
305 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
306
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
307 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
308 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
309 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
310 lastElement = lastElement.element(Tags.pointerTag)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
311 .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
312 .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
313
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
314 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
315 };
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
316 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
317
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
318 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
319 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
320 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
321 .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
322 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
323
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
324 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
325 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
326 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
327 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
328 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
329 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
330 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
331 .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
332 .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
333 .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
334 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
335 }
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
336 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
337
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
338 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
339 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
340 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
341 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
342 .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
343 .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
344
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
345 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
346 };
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
347 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
348
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
349 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
350 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
351 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
352 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
353 .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
354 .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
355
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
356 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
357 };
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
358 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
359
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
360 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
361 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
362 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
363 }
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 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
366 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
367 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
368 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
369
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
370 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
371 {
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
372 archiveString(value, key, id);
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
373 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
374
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
375 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
376 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
377 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
378 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
379 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
380
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
381 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
382 };
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
383 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
384
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
385 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
386 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
387 archivePrimitive(value, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
388 }
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 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
391 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
392 archivePrimitive(value, key);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
393 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
394
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
395 // 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
396 /*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
397 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
398 archivePrimitive(value, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
399 }*/
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
400
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
401 //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
402 /*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
403 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
404 archivePrimitive(value, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
405 }*/
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
406
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
407 //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
408 /*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
409 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
410 archivePrimitive(value, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
411 }*/
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
412
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
413 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
414 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
415 archivePrimitive(value, key);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
416 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
417
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
418 //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
419 /*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
420 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
421 archivePrimitive(value, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
422 }*/
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
423
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
424 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
425 {
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
426 archivePrimitive(value, key);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
427 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
428
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
429 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
430 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
431 archivePrimitive(value, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
432 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
433
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
434 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
435 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
436 archivePrimitive(value, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
437 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
438
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 (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
441 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
442 archivePrimitive(value, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
443 }*/
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
444
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
445 //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
446 /*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
447 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
448 archivePrimitive(value, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
449 }*/
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
450
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
451 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
452 {
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
453 archivePrimitive(value, key);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
454 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
455
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
456 //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
457 /*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
458 {
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
459 archivePrimitive(value, key);
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
460 }*/
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
461
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
462 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
463 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
464 archivePrimitive(value, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
465 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
466
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
467 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
468 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
469 archivePrimitive(value, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
470 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
471
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
472 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
473 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
474 archivePrimitive(value, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
475 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
476
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
477 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
478 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
479 archivePrimitive(value, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
480 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
481
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
482 //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
483 /*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
484 {
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
485 archivePrimitive(value, key);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
486 }*/
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
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 (uint value, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
489 {
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
490 archivePrimitive(value, key);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
491 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
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 (ulong value, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
494 {
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
495 archivePrimitive(value, key);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
496 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
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 (ushort value, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
499 {
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
500 archivePrimitive(value, key);
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
501 }
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
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 void archive (wchar value, string key, Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
504 {
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
505 archivePrimitive(value, key);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
506 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
507
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
508 private void archivePrimitive (T) (T value, string key)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
509 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
510 lastElement.element(toData(T.stringof), toData(value))
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
511 .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
512 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
513
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
514 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
515 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
516 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
517 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
518
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
519 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
520 return Id.max;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
521
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
522 lastElement = element;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
523 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
524
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
525 if (!len)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
526 return Id.max;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
527
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
528 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
529 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
530
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
531 if (!id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
532 return Id.max;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
533
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
534 dg(length);
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 return id.toId();
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 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
539
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
540 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
541 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
542 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
543 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
544
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
545 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
546 return;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
547
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
548 lastElement = element;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
549 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
550
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
551 if (!len)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
552 return;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
553
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
554 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
555 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
556
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
557 if (!stringId)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
558 return;
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 dg(length);
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 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
563
28
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
564 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
565 {
28
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
566 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
567 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
568
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
569 if (!element.isValid)
28
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
570 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
571
28
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
572 lastElement = element;
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
573 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
574
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
575 if (!len)
28
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
576 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
577
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
578 auto length = fromData!(size_t)(len);
28
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
579 auto id = getValueOfAttribute(Attributes.idAttribute);
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
580
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
581 if (!id)
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
582 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
583
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
584 dg(length);
28
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
585
bffcbc8c392b Associative arrays are now treated as references.
Jacob Carlborg <doob@me.com>
parents: 26
diff changeset
586 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
587 };
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
588 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
589
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
590 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
591 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
592 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
593 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
594
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
595 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
596 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
597 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
598 }
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
599
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
600 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
601 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
602 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
603 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
604
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
605 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
606 return;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
607
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
608 lastElement = element;
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 dg();
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 }
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 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
615 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
616 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
617 }
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 byte unarchiveEnumByte (string key)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
620 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
621 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
622 }
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 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
625 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
626 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
627 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
628
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
629 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
630 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
631 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
632 }
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 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
635 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
636 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
637 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
638
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
639 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
640 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
641 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
642 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
643
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
644 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
645 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
646 return unarchiveEnum!(short)(key);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
647 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
648
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
649 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
650 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
651 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
652 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
653
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
654 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
655 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
656 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
657 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
658
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
659 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
660 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
661 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
662 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
663
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
664 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
665 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
666 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
667 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
668
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
669 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
670 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
671 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
672 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
673
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
674 private T unarchiveEnum (T) (string key)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
675 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
676 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
677
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
678 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
679 return T.init;
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 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
682 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
683
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
684 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
685 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
686 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
687 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
688
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
689 if (!tmp.isValid)
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 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
692 return;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
693 }
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 lastElement = tmp;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
696
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
697 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
698
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
699 if (!runtimeType)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
700 return;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
701
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
702 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
703 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
704
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
705 if (!stringId)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
706 return;
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 id = stringId.toId();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
709 result = newInstance(name);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
710 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
711 };
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
712 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
713
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
714 Id unarchivePointer (string key, void delegate () dg)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
715 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
716 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
717 auto tmp = getElement(Tags.pointerTag, 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
718
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
719 if (!tmp.isValid)
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 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
722 return Id.max;
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
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
725 lastElement = tmp;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
726 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
727
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
728 if (!stringId)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
729 return Id.max;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
730
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
731 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
732
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
733 return stringId.toId();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
734 };
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
735 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
736
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
737 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
738 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
739 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
740
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
741 if (element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
742 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
743
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;
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
745 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
746
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
747 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
748 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
749 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
750
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
751 if (element.isValid)
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 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
754 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
755 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
756
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
757 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
758 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
759
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
760 return Slice.init;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
761 }
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 void unarchiveStruct (string key, void delegate () dg)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
764 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
765 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
766 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
767
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
768 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
769 return;
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 lastElement = element;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
772 dg();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
773 };
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
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
776 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
777 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
778 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
779
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
780 if (element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
781 lastElement = element;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
782
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
783 return T.init;
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
784 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
785
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
786 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
787 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
788 restore(lastElement) in {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
789 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
790
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
791 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
792 return;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
793
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
794 lastElement = element;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
795 dg();
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
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
799 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
800 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
801 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
802 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
803
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
804 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
805 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
806 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
807 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
808
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
809 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
810 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
811 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
812 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
813
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
814 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
815 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
816 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
817
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
818 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
819 return T.init;
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 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
822 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
823
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
824 if (!stringId)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
825 return T.init;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
826
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
827 id = stringId.toId();
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
828 return value;
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 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
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!(string)(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 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
837 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
838 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
839 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
840
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
841 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
842 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
843 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
844 }
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 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
847 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
848 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
849
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
850 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
851 return T.init;
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 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
854 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
855
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
856 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
857 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
858 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
859 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
860
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
861 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
862 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
863 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
864 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
865
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
866 //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
867 /*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
868 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
869 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
870 }*/
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 //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
873 /*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
874 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
875 return unarchivePrimitive!(cent)(key);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
876 }*/
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
877
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
878 // 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
879 /*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
880 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
881 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
882 }*/
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
883
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
884 char unarchiveChar (string key)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
885 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
886 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
887 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
888
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
889 //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
890 /*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
891 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
892 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
893 }*/
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
894
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
895 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
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!(dchar)(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 double unarchiveDouble (string key)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
901 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
902 return unarchivePrimitive!(double)(key);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
903 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
904
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
905 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
906 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
907 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
908 }
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 //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
911 /*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
912 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
913 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
914 }*/
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 // 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
917 /*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
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!(ifloat)(key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
920 }*/
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
921
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
922 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
923 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
924 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
925 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
926
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
927 // 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
928 /*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
929 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
930 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
931 }*/
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
932
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
933 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
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!(long)(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 real unarchiveReal (string key)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
939 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
940 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
941 }
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 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
944 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
945 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
946 }
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 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
949 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
950 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
951 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
952
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
953 // 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
954 /*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
955 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
956 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
957 }*/
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 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
960 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
961 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
962 }
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 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
965 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
966 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
967 }
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 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
970 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
971 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
972 }
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 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
975 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
976 return unarchivePrimitive!(wchar)(key);
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
977 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
978
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
979 T unarchivePrimitive (T) (string key)
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 auto element = getElement(toData(T.stringof), 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 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
984 return T.init;
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 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
987 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
988
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
989 void postProcessArray (Id id)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
990 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
991 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
992 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
993 }
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 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
996 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
997 archivedArrays[id] = ArrayNode(parent, element, id, key);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
998 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
999
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1000 private ArrayNode* getArchivedArray (Id id)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1001 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1002 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
1003 return array;
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 errorCallback(new ArchiveException(`Could not continue archiving due to no array with the Id "` ~ to!(string)(id) ~ `" was found.`, __FILE__, __LINE__), [to!(string)(id)]);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1006
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1007 return null;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1008 }
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
1009
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1010 private doc.Node getElement (Data tag, string k, Data attribute = Attributes.keyAttribute, bool throwOnError = true)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1011 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1012 auto key = toData(k);
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1013
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1014 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
1015 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
1016 return true;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1017
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1018 return false;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1019 });
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1020
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1021 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
1022 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
1023
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1024 else
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1025 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1026 if (throwOnError && errorCallback)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1027 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1028 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
1029 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
1030
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1031 else
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1032 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
1033 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1034
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1035 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
1036 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1037 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1038
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1039 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
1040 {
26
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1041 if (!element.isValid)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1042 element = lastElement;
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1043
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1044 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
1045
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1046 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
1047 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
1048
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1049 else
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1050 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1051 if (errorCallback)
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1052 {
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1053 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
1054 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
1055
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1056 else
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1057 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
1058 }
78e5fef4bbf2 Third step in refactoring the API. Stating to add unit tests.
Jacob Carlborg <doob@me.com>
parents: 25
diff changeset
1059 }
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 null;
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
1062 }
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
1063
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1064 version (Tango)
24
55f0a9d5df8d First step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 22
diff changeset
1065 {
25
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1066 private template errorMessage (ArchiveMode mode = ArchiveMode.archiving)
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1067 {
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1068 static if (mode == ArchiveMode.archiving)
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1069 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
1070
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1071 else static if (mode == ArchiveMode.unarchiving)
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1072 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
1073 }
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1074 }
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1075
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1076 else
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1077 {
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1078 mixin(
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1079 `private template errorMessage (ArchiveMode mode = ArchiveMode.archiving)
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1080 {
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1081 static if (mode == ArchiveMode.archiving)
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1082 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
1083
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1084 else static if (mode == ArchiveMode.unarchiving)
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1085 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
1086 }`
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1087 );
b51e953f79eb Second step in refactoring the API.
Jacob Carlborg <doob@me.com>
parents: 24
diff changeset
1088 }
0
f7b078e85f7f First commit
Jacob Carlborg <doob@me.com>
parents:
diff changeset
1089 }