ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/freezethaw.h
(Generate patch)

Comparing deliantra/server/include/freezethaw.h (file contents):
Revision 1.1 by root, Thu Apr 15 04:02:38 2010 UTC vs.
Revision 1.16 by root, Wed Dec 5 19:03:26 2018 UTC

1/* 1/*
2 * This file is part of Deliantra, the Roguelike Realtime MMORPG. 2 * This file is part of Deliantra, the Roguelike Realtime MMORPG.
3 * 3 *
4 * Copyright (©) 2017,2018 Marc Alexander Lehmann / the Deliantra team
4 * Copyright (©) 2005,2006,2007,2008,2009,2010 Marc Alexander Lehmann / Robin Redeker / the Deliantra team 5 * Copyright (©) 2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
5 * 6 *
6 * Deliantra is free software: you can redistribute it and/or modify it under 7 * Deliantra is free software: you can redistribute it and/or modify it under
7 * the terms of the Affero GNU General Public License as published by the 8 * the terms of the Affero GNU General Public License as published by the
8 * Free Software Foundation, either version 3 of the License, or (at your 9 * Free Software Foundation, either version 3 of the License, or (at your
9 * option) any later version. 10 * option) any later version.
10 * 11 *
11 * This program is distributed in the hope that it will be useful, 12 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details. 15 * GNU General Public License for more details.
15 * 16 *
16 * You should have received a copy of the Affero GNU General Public License 17 * You should have received a copy of the Affero GNU General Public License
17 * and the GNU General Public License along with this program. If not, see 18 * and the GNU General Public License along with this program. If not, see
18 * <http://www.gnu.org/licenses/>. 19 * <http://www.gnu.org/licenses/>.
19 * 20 *
20 * The authors can be reached via e-mail to <support@deliantra.net> 21 * The authors can be reached via e-mail to <support@deliantra.net>
21 */ 22 */
22 23
23#ifndef FREEZETHAW_H__ 24#ifndef FREEZETHAW_H__
24#define FREEZETHAW_H__ 25#define FREEZETHAW_H__
61 62
62 // serialise perl part 63 // serialise perl part
63 void put_ (attachable *ext); 64 void put_ (attachable *ext);
64 void put (attachable *ext) 65 void put (attachable *ext)
65 { 66 {
66 if (expect_false (ext->self)) 67 if (ecb_expect_false (ext->self))
67 put_ (ext); 68 put_ (ext);
68 } 69 }
69 70
70 // null value (== no space after keyword) 71 // null value (== no space after keyword)
71 void put (const keyword_string k) 72 void put (const keyword_string k)
83 alloc (p); 84 alloc (p);
84 } 85 }
85 86
86 void put (const keyword_string k, const_utf8_string v) 87 void put (const keyword_string k, const_utf8_string v)
87 { 88 {
88 if (expect_true (v)) 89 if (ecb_expect_true (v))
89 put (k, keyword_string (v, strlen (v))); 90 put (k, keyword_string (v, strlen (v)));
90 else 91 else
91 put (k); 92 put (k);
92 } 93 }
93 94
137 void put (const keyword_string kbeg, const keyword_string kend, shstr_tmp v) 138 void put (const keyword_string kbeg, const keyword_string kend, shstr_tmp v)
138 { 139 {
139 force (MAX_KEYWORD_LEN + 1); 140 force (MAX_KEYWORD_LEN + 1);
140 fadd (kbeg.s, kbeg.l); fadd ('\n'); 141 fadd (kbeg.s, kbeg.l); fadd ('\n');
141 142
142 if (expect_true (v)) 143 if (ecb_expect_true (v))
143 { 144 {
144 add (v); 145 add (v);
145 add ('\n'); 146 add ('\n');
146 } 147 }
147 148
163 utf8_string as_string (); // like strdup 164 utf8_string as_string (); // like strdup
164 165
165 operator bool () { return !!av; } 166 operator bool () { return !!av; }
166}; 167};
167 168
169// used as dir argument to object_thawer constructor
170#define RESOURCE_DIR const_utf8_string (0)
171
168INTERFACE_CLASS(object_thawer) 172INTERFACE_CLASS(object_thawer)
169struct object_thawer 173struct object_thawer
170{ 174{
175 static bool errors_are_fatal; // true during server startup only
176
171 char *line; // current beginning of line 177 char *line; // current beginning of line
172 SV *text; // text part 178 SV *text; // text part
173 AV *av; // perl part 179 AV *av; // perl part
174 int linenum; 180 int linenum;
175 keyword kw; 181 keyword kw;
179 const char *name; 185 const char *name;
180 186
181 operator bool () const { return !!text; } 187 operator bool () const { return !!text; }
182 188
183 object_thawer (const_utf8_string path = 0); 189 object_thawer (const_utf8_string path = 0);
190 object_thawer (const_utf8_string dir, const_utf8_string file);
184 object_thawer (const_utf8_string data, AV *perlav); 191 object_thawer (const_utf8_string data, AV *perlav);
185 ~object_thawer (); 192 ~object_thawer ();
186 193
187 void get (attachable *obj, int oid); 194 void get (attachable *obj, int oid);
188 195
189 // parse next line as keyword-value pair 196 // parse next line as keyword-value pair
190 MTH void next (); 197 MTH void next ();
191 198
192 // parse next line, as a single value - skips initial whitespace and comments 199 // parse next line, as a single value
200 // skips initial whitespace and comments
201 // and sets kw to KW_value on success.
193 MTH void next_line (); 202 MTH bool next_line ();
194 203
195 // skip the current key-value (usually fetch next line, for 204 // skip the current key-value (usually fetch next line, for
196 // multiline-fields, skips till the corresponding end-kw 205 // multiline-fields, skips till the corresponding end-kw
197 MTH void skip (); 206 MTH void skip ();
198 MTH void skip_block (); // skips till and over KW_end 207 MTH void skip_block (); // skips till and over KW_end
199 208
209 // returns true IFF a value was specified and it is not the empty string
210 // formerly, this just etsetd for a value, but the editor is too dumb
211 // and creates lots of empty values.
200 bool has_value () { return value; } 212 bool has_value () const { return *value_nn; }
201 const_utf8_string get_str () { return value_nn; } // empty string when missing 213 const_utf8_string get_str () const { return value_nn; } // empty string when missing
202 void get_ml (keyword kend, shstr &sh); 214 void get_ml (keyword kend, shstr &sh);
203 215
204 void get_ornull (shstr &sh) const { sh = value; } 216 void get_ornull (shstr &sh) const { sh = value; }
205 void get (shstr &sh) const { sh = value; } // might want to check for non-null here 217 void get (shstr &sh) const { sh = value; } // might want to check for non-null here
206 218
207 bool get_bool () const { return *value_nn == '1'; } 219 bool get_bool () const { return *value_nn == '1'; }
208 sint32 get_sint32 () const; 220 sint32 get_sint32 () const;
209 sint64 get_sint64 () const { return strtoll (value_nn, 0, 10); } 221 sint64 get_sint64 () const { return strtoll (value_nn, 0, 10); }
210 double get_double () const { return strtod (value_nn, 0); } 222 double get_double () const { return strtod (value_nn, 0); }
211 223
212 void get (float &v) { v = get_double (); } 224 void get (float &v) const { v = get_double (); }
213 void get (double &v) { v = get_double (); } 225 void get (double &v) const { v = get_double (); }
214 226
215 void get (bool &i) { i = get_bool (); } 227 void get (bool &i) const { i = get_bool (); }
216 void get (sint8 &i) { i = get_sint32 (); } 228 void get (sint8 &i) const { i = get_sint32 (); }
217 void get (uint8 &i) { i = get_sint32 (); } 229 void get (uint8 &i) const { i = get_sint32 (); }
218 void get (sint16 &i) { i = get_sint32 (); } 230 void get (sint16 &i) const { i = get_sint32 (); }
219 void get (uint16 &i) { i = get_sint32 (); } 231 void get (uint16 &i) const { i = get_sint32 (); }
220 void get (sint32 &i) { i = get_sint32 (); } 232 void get (sint32 &i) const { i = get_sint32 (); }
221 233
222 void get (uint32 &i) { i = get_sint64 (); } 234 void get (uint32 &i) const { i = get_sint64 (); }
223 void get (sint64 &i) { i = get_sint64 (); } 235 void get (sint64 &i) const { i = get_sint64 (); }
224 236
237 void get (region_ptr &r) const;
238 void get (materialtype_t *&mt) const;
239
225 MTH void parse_warn (const_utf8_string msg); 240 MTH void parse_warn (const_utf8_string msg) const;
226 MTH bool parse_error (const_utf8_string type = 0, const_utf8_string name = 0, bool skip = true); 241 MTH bool parse_error (const_utf8_string type = 0, const_utf8_string name = 0, bool skip = true) const;
227 242
228 struct delayed_ref { 243 struct delayed_ref {
229 attachable *op; 244 attachable *op;
230 object_ptr *ptr; 245 object_ptr *ptr;
231 const_utf8_string ref; 246 const_utf8_string ref;
232 }; 247 };
233 std::vector<delayed_ref> delrefs; 248 std::vector<delayed_ref> delrefs;
234 249
235 void delayed_deref (attachable *op, object_ptr &ptr, const_utf8_string ref); 250 void delayed_deref (attachable *op, object_ptr &ptr, const_utf8_string ref);
236 MTH void resolve_delayed_derefs (bool deref = true); 251 MTH void resolve_delayed_derefs (bool deref = true);
252private:
253 void init (const_utf8_string path);
254 void init_from_file (const_utf8_string path);
237}; 255};
238 256
239//TODO: remove
240char *fgets (char *s, int n, object_thawer &thawer);
241
242#endif 257#endif
243 258

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines