Mercurial > projects > mde
annotate mde/mergetag/dataset.d @ 2:78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
committer: Diggory Hardy <diggory.hardy@gmail.com>
author | Diggory Hardy <diggory.hardy@gmail.com> |
---|---|
date | Sat, 03 Nov 2007 15:15:43 +0000 |
parents | 18491334a525 |
children | 9a990644948c |
rev | line source |
---|---|
0 | 1 /// This module contains a minimal definition of a MergeTag DataSet. |
2 module mde.mergetag.dataset; | |
3 | |
4 // package imports | |
5 import mde.mergetag.exception; | |
6 | |
2
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
7 // other mde imports |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
8 import mde.text.util; |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
9 import mde.text.parse; |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
10 import mde.text.exception : TextParseException; |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
11 |
0 | 12 // tango imports |
13 import Util = tango.text.Util; | |
14 import tango.util.log.Log : Log, Logger; | |
15 | |
16 /** Typedef for data & section indexes (can be changed to ulong if necessary.) */ | |
17 typedef uint ID; | |
18 | |
19 package struct MTFormatVersion { | |
20 enum VERS : ubyte { // convenient list of all known file format versions | |
21 INVALID = 0x00, | |
22 MT01 = 0x01, // not yet final | |
23 } | |
24 /// The current MergeTag version | |
25 static const VERS Current = VERS.MT01; | |
26 static const char[2] CurrentString = "01"; | |
27 | |
1
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
28 static VERS parseString (char[] str) |
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
29 in { |
0 | 30 assert (str.length == 2); |
1
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
31 } body { |
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
32 if (str[0] == '0' && str[1] == '1') return VERS.MT01; |
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
33 else return VERS.INVALID; |
0 | 34 } |
35 } | |
36 | |
37 private Logger logger; | |
38 static this () { | |
39 logger = Log.getLogger ("mde.mergetag.dataset"); | |
40 } | |
41 | |
2
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
42 struct TextTag { |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
43 TextTag opCall (char[] _tp, ID _id, char[] _dt) { |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
44 TextTag ret; |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
45 ret.tp = _tp; |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
46 ret.id = _id; |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
47 ret.dt = _dt; |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
48 return ret; |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
49 } |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
50 char[] tp, dt; |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
51 ID id; |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
52 } |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
53 |
0 | 54 /************************************************************************************************** |
55 * Data class; contains a DataSection class instance for each loaded section of a file. | |
56 * | |
57 * Any class implementing DataSection may be used to store data; by default a DefaultData class is | |
58 * used when reading a file. Another class may be used by creating the sections before reading the | |
59 * file or passing the reader a function to create the sections (see Reader.dataSecCreator). | |
60 * | |
61 * Could be a struct, except that structs are value types (not reference types). | |
62 */ | |
63 class DataSet | |
64 { | |
65 DataSection header; /// Header | |
66 DataSection[ID] sec; /// Dynamic array of sections | |
67 | |
68 /// Return a reference to the indexed item | |
69 DataSection opIndex(ID i) { | |
70 return sec[i]; | |
71 } | |
72 | |
73 /// Template to return all sections of a child-class type. | |
74 T[ID] getSections (T : DataSection) () { | |
75 T[ID] ret; | |
76 foreach (ID id, DataSection s; sec) { | |
77 T x = cast(T) s; | |
78 if (x) ret[id] = x; // if non-null | |
79 } | |
80 return ret; | |
81 } | |
82 } | |
83 | |
84 /** | |
85 * Interface for data storage classes, which contain all data-tags loaded from a single section of a | |
86 * file. | |
87 * | |
88 * A class implementing this may implement the addTag function to do whatever it likes with the | |
89 * data passed; DefaultData separates this data out into supported types and stores it | |
90 * appropriately, while throwing an error when unsupported types are passed, but a different | |
91 * implementation could filter out the tags desired and use them directly, while ignoring the rest. | |
92 * The parse module provides a useful set of templated functions to | |
93 * convert the data accordingly. It is advised to keep the type definitions as defined in the file- | |
94 * format except for user-defined types. | |
95 * | |
96 * Another idea for a DataSection class: | |
97 * Use a void*[ID] variable to store all data (may also need a type var for each item). | |
98 * addTag should call a templated function which calls parse then casts to a void* and stores the data. | |
2
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
99 * Use a templated get(T)(ID) method which checks the type and casts to T. |
0 | 100 */ |
101 interface DataSection | |
102 { | |
103 /** Handles parsing of data items. | |
104 * | |
105 * Should throw an MTUnknownTypeException for unsupported types, after logging to logger. | |
106 */ | |
2
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
107 void addTag (TypeInfo,ID,char[]); |
0 | 108 //void writeAll (Print!(char)); /// TBD |
109 } | |
110 | |
111 /** | |
112 * Default DataSection class. | |
113 * | |
114 * Supports all the basic types currently supported and array versions of | |
115 * each (except no arrays of binary or string types; these are already arrays). | |
116 */ | |
2
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
117 /* Due to a failure to use generic programming techniques for most of this (maybe because it's not |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
118 * possible or maybe just because I don't know how to use templates properly) a lot of this code is |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
119 * really horrible and has to refer to EVERY data member. |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
120 * Be really careful if you add any items to this class. |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
121 * |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
122 * I really don't like having to do things like this, but it provides a lot of benefits such as no |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
123 * need to store types and no need to check an argument's type for every access (this could be done |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
124 * by throwing errors, but then an incorrect (perhaps hand-edited) data file could cause a lot of |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
125 * errors to be thrown). |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
126 */ |
0 | 127 class DefaultData : DataSection |
128 { | |
1
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
129 //BEGIN DATA |
2
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
130 /** Data Members |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
131 * |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
132 * These names are available for direct access. |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
133 * |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
134 * An alternative access method is to use the provided templates: |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
135 * -------------------- |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
136 * template Arg(T) { |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
137 * alias Name Arg; |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
138 * } |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
139 * -------------------- |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
140 * |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
141 * Use with a mixin or directly: |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
142 * -------------------- |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
143 * mixin Arg!(type); |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
144 * auto x = Arg; |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
145 * |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
146 * type y = Arg!(type).Arg; |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
147 * -------------------- |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
148 * Note: trying to use Arg!(type) to implicitly refer to Arg!(type).Arg causes compiler errors due to |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
149 * --- alias Name Arg; --- |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
150 * actually being a mixin. |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
151 */ |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
152 |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
153 bool [ID] _bool; |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
154 byte [ID] _byte; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
155 short [ID] _short; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
156 int [ID] _int; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
157 long [ID] _long; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
158 ubyte [ID] _ubyte; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
159 ushort [ID] _ushort; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
160 uint [ID] _uint; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
161 ulong [ID] _ulong; /// ditto |
1
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
162 |
2
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
163 char [ID] _char; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
164 |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
165 float [ID] _float; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
166 double [ID] _double; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
167 real [ID] _real; /// ditto |
1
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
168 |
2
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
169 bool[] [ID] _boolA; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
170 byte[] [ID] _byteA; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
171 short[] [ID] _shortA; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
172 int[] [ID] _intA; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
173 long[] [ID] _longA; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
174 ubyte[] [ID] _ubyteA; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
175 ushort[] [ID] _ushortA; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
176 uint[] [ID] _uintA; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
177 ulong[] [ID] _ulongA; /// ditto |
1
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
178 |
2
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
179 char[] [ID] _charA; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
180 |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
181 float[] [ID] _floatA; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
182 double[] [ID] _doubleA; /// ditto |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
183 real[] [ID] _realA; /// ditto |
1
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
184 |
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
185 /** Alias names */ |
2
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
186 alias _ubyteA _binary; |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
187 alias _charA _string; /// ditto |
1
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
188 //END DATA |
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
189 |
2
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
190 void addTag (TypeInfo ti, ID id, char[] dt) { /// for adding tags |
0 | 191 try { |
2
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
192 // crazy way of only writing one parameter on each line: |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
193 mixin ( `if (ti == typeid(bool)) addTag_add!(bool) (id, dt);` |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
194 ~ addTag_elifIsType_add!(byte) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
195 ~ addTag_elifIsType_add!(short) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
196 ~ addTag_elifIsType_add!(int) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
197 ~ addTag_elifIsType_add!(long) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
198 ~ addTag_elifIsType_add!(ubyte) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
199 ~ addTag_elifIsType_add!(ushort) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
200 ~ addTag_elifIsType_add!(uint) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
201 ~ addTag_elifIsType_add!(ulong) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
202 ~ addTag_elifIsType_add!(char) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
203 ~ addTag_elifIsType_add!(float) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
204 ~ addTag_elifIsType_add!(double) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
205 ~ addTag_elifIsType_add!(real) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
206 ~ addTag_elifIsType_add!(bool[]) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
207 ~ addTag_elifIsType_add!(byte[]) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
208 ~ addTag_elifIsType_add!(short[]) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
209 ~ addTag_elifIsType_add!(int[]) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
210 ~ addTag_elifIsType_add!(long[]) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
211 ~ addTag_elifIsType_add!(ubyte[]) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
212 ~ addTag_elifIsType_add!(ushort[]) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
213 ~ addTag_elifIsType_add!(uint[]) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
214 ~ addTag_elifIsType_add!(ulong[]) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
215 ~ addTag_elifIsType_add!(char[]) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
216 ~ addTag_elifIsType_add!(float[]) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
217 ~ addTag_elifIsType_add!(double[]) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
218 ~ addTag_elifIsType_add!(real[]) |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
219 ); |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
220 } catch (TextParseException) { |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
221 // Just ignore it. A warning's already been logged. |
0 | 222 } |
223 } | |
2
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
224 private template addTag_elifIsType_add(T) { |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
225 const addTag_elifIsType_add = `else if (ti == typeid(`~T.stringof~`)) addTag_add!(`~T.stringof~`) (id, dt);` ; |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
226 } |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
227 private void addTag_add(T) (ID id, char[] dt) { |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
228 Arg!(T).Arg[id] = parse!(T) (dt); |
1
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
229 } |
0 | 230 |
2
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
231 void writeTags (out TextTag[] ret) { |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
232 //ret.length = Arg!().length + ...; |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
233 |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
234 |
1
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
235 } |
2
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
236 |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
237 /* These make no attempt to check Arg is valid. |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
238 * But if the symbol doesn't exist the complier will throw an error anyway, e.g.: |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
239 * Error: identifier '_boolAA' is not defined |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
240 */ |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
241 template Arg(T : T[]) { |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
242 const ArgString = Arg!(T).ArgString ~ `A`; |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
243 mixin(`alias `~ArgString~` Arg;`); |
1
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
244 } |
2
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
245 template Arg(T) { |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
246 const ArgString = `_` ~ T.stringof; |
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
247 mixin(`alias `~ArgString~` Arg;`); |
1
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
248 } |
0 | 249 } |
1
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
250 |
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
251 /+ |
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
252 class TemplateData : DataSection |
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
253 { |
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
254 void addTag (char[] tp, ID id, char[] dt) { |
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
255 // runtime deduction of tp and aliasing? |
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
256 // CANNOT add data at runtime though. |
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
257 } |
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
258 // will this work? no idea. |
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
259 // templates can't be used to add non-static elements, so use a static array at index: this |
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
260 template Data(T,TemplateData* p) { |
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
261 static T[ID][TemplateData*] Data; |
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
262 } |
18491334a525
Finished format.d and parse.d modules; moved to mde/text. Partway implementing mde.mergetag.write.TextWriter.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
0
diff
changeset
|
263 } |
2
78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
1
diff
changeset
|
264 +/ |