--- deliantra/server/include/freezethaw.h 2010/04/15 06:05:52 1.4 +++ deliantra/server/include/freezethaw.h 2016/11/16 23:42:00 1.14 @@ -1,22 +1,22 @@ /* * This file is part of Deliantra, the Roguelike Realtime MMORPG. - * - * Copyright (©) 2005,2006,2007,2008,2009,2010 Marc Alexander Lehmann / Robin Redeker / the Deliantra team - * + * + * Copyright (©) 2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016 Marc Alexander Lehmann / Robin Redeker / the Deliantra team + * * Deliantra is free software: you can redistribute it and/or modify it under * the terms of the Affero GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or (at your * option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the Affero GNU General Public License * and the GNU General Public License along with this program. If not, see * . - * + * * The authors can be reached via e-mail to */ @@ -165,6 +165,9 @@ operator bool () { return !!av; } }; +// used as dir argument to object_thawer constructor +#define RESOURCE_DIR const_utf8_string (0) + INTERFACE_CLASS(object_thawer) struct object_thawer { @@ -183,6 +186,7 @@ operator bool () const { return !!text; } object_thawer (const_utf8_string path = 0); + object_thawer (const_utf8_string dir, const_utf8_string file); object_thawer (const_utf8_string data, AV *perlav); ~object_thawer (); @@ -201,8 +205,11 @@ MTH void skip (); MTH void skip_block (); // skips till and over KW_end - bool has_value () { return value; } - const_utf8_string get_str () { return value_nn; } // empty string when missing + // returns true IFF a value was specified and it is not the empty string + // formerly, this just etsetd for a value, but the editor is too dumb + // and creates lots of empty values. + bool has_value () const { return *value_nn; } + const_utf8_string get_str () const { return value_nn; } // empty string when missing void get_ml (keyword kend, shstr &sh); void get_ornull (shstr &sh) const { sh = value; } @@ -213,21 +220,24 @@ sint64 get_sint64 () const { return strtoll (value_nn, 0, 10); } double get_double () const { return strtod (value_nn, 0); } - void get (float &v) { v = get_double (); } - void get (double &v) { v = get_double (); } + void get (float &v) const { v = get_double (); } + void get (double &v) const { v = get_double (); } + + void get (bool &i) const { i = get_bool (); } + void get (sint8 &i) const { i = get_sint32 (); } + void get (uint8 &i) const { i = get_sint32 (); } + void get (sint16 &i) const { i = get_sint32 (); } + void get (uint16 &i) const { i = get_sint32 (); } + void get (sint32 &i) const { i = get_sint32 (); } - void get (bool &i) { i = get_bool (); } - void get (sint8 &i) { i = get_sint32 (); } - void get (uint8 &i) { i = get_sint32 (); } - void get (sint16 &i) { i = get_sint32 (); } - void get (uint16 &i) { i = get_sint32 (); } - void get (sint32 &i) { i = get_sint32 (); } + void get (uint32 &i) const { i = get_sint64 (); } + void get (sint64 &i) const { i = get_sint64 (); } - void get (uint32 &i) { i = get_sint64 (); } - void get (sint64 &i) { i = get_sint64 (); } + void get (region_ptr &r) const; + void get (materialtype_t *&mt) const; - MTH void parse_warn (const_utf8_string msg); - MTH bool parse_error (const_utf8_string type = 0, const_utf8_string name = 0, bool skip = true); + MTH void parse_warn (const_utf8_string msg) const; + MTH bool parse_error (const_utf8_string type = 0, const_utf8_string name = 0, bool skip = true) const; struct delayed_ref { attachable *op; @@ -238,6 +248,9 @@ void delayed_deref (attachable *op, object_ptr &ptr, const_utf8_string ref); MTH void resolve_delayed_derefs (bool deref = true); +private: + void init (const_utf8_string path); + void init_from_file (const_utf8_string path); }; #endif