mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-10 04:57:00 -04:00
fixed reading of IndexMaps: loop, initialization of 'index'
git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@41 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
@@ -116,10 +116,13 @@ void Reader::readLine() {
|
||||
}
|
||||
|
||||
void Reader::unknownKey() {
|
||||
warning(_("Unexpected key: '") + key + _("'"));
|
||||
do {
|
||||
moveNext();
|
||||
} while (indent > expected_indent);
|
||||
if (indent == expected_indent) {
|
||||
warning(_("Unexpected key: '") + key + _("'"));
|
||||
do {
|
||||
moveNext();
|
||||
} while (indent > expected_indent);
|
||||
}
|
||||
// else: could be a nameless value, which doesn't call exitBlock to move past its own key
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------- : Handling basic types
|
||||
|
||||
+10
-4
@@ -146,12 +146,16 @@ shared_ptr<T> read_new(Reader& reader) {
|
||||
return new_shared<T>();
|
||||
}
|
||||
|
||||
/// Update the 'index' member of a value for use by IndexMap
|
||||
template <typename T> void update_index(T&, size_t index) {}
|
||||
|
||||
template <typename T>
|
||||
void Reader::handle(const Char* name, vector<T>& vector) {
|
||||
String vectorKey = singular_form(name);
|
||||
while (enterBlock(vectorKey)) {
|
||||
vector.resize(vector.size() + 1);
|
||||
handle(vector.back());
|
||||
update_index(vector.back(), vector.size() - 1); // update index for IndexMap
|
||||
exitBlock();
|
||||
}
|
||||
}
|
||||
@@ -169,11 +173,13 @@ void Reader::handle(map<K,V>& m) {
|
||||
|
||||
template <typename K, typename V>
|
||||
void Reader::handle(IndexMap<K,V>& m) {
|
||||
while (indent >= expected_indent) {
|
||||
do {
|
||||
UInt l = line_number;
|
||||
for (typename IndexMap<K,V>::iterator it = m.begin() ; it != m.end() ; ++it) {
|
||||
handle(get_key_name(*it).c_str(), *it);
|
||||
}
|
||||
}
|
||||
if (l == line_number) unknownKey(m);
|
||||
} while (indent >= expected_indent);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------- : Reflection
|
||||
@@ -181,11 +187,11 @@ void Reader::handle(IndexMap<K,V>& m) {
|
||||
/// Implement reflection as used by Reader
|
||||
#define REFLECT_OBJECT_READER(Cls) \
|
||||
template<> void Reader::handle<Cls>(Cls& object) { \
|
||||
while (indent >= expected_indent) { \
|
||||
do { \
|
||||
UInt l = line_number; \
|
||||
object.reflect(*this); \
|
||||
if (l == line_number) unknownKey(object); \
|
||||
} \
|
||||
} while (indent >= expected_indent); \
|
||||
} \
|
||||
void Cls::reflect(Reader& reader) { \
|
||||
reflect_impl(reader); \
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
//+----------------------------------------------------------------------------+
|
||||
//| Description: Magic Set Editor - Program to make Magic (tm) cards |
|
||||
//| Copyright: (C) 2001 - 2006 Twan van Laarhoven |
|
||||
//| License: GNU General Public License 2 or later (see file COPYING) |
|
||||
//+----------------------------------------------------------------------------+
|
||||
|
||||
// ----------------------------------------------------------------------------- : Includes
|
||||
|
||||
#include <util/version.hpp>
|
||||
#include <util/reflect.hpp>
|
||||
#include <script/value.hpp>
|
||||
|
||||
// ----------------------------------------------------------------------------- : Version
|
||||
|
||||
UInt Version::toNumber() const { return version; }
|
||||
|
||||
String Version::toString() const {
|
||||
return String() <<
|
||||
((version / 10000) % 100) <<
|
||||
_(".") << ((version / 100) % 100) <<
|
||||
_(".") << ((version / 1) % 100);
|
||||
}
|
||||
|
||||
Version Version::fromString(const String& version) {
|
||||
UInt major = 0, minor = 0, build = 0;
|
||||
wxSscanf(version, _("%u.%u.%u"), &major, &minor, &build);
|
||||
return Version(major * 10000 + minor * 100 + build);
|
||||
}
|
||||
|
||||
|
||||
template <> void Reader::handle(Version& v) {
|
||||
v = Version::fromString(value);
|
||||
}
|
||||
template <> void Writer::handle(const Version& v) {
|
||||
handle(v.toString());
|
||||
}
|
||||
template <> void GetDefaultMember::handle(const Version& v) {
|
||||
handle(v.toNumber());
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------- : Versions
|
||||
|
||||
// NOTE: Don't use leading zeroes, they mean octal
|
||||
const Version app_version = 300; // 0.3.0
|
||||
const Char* version_suffix = _(" (beta)");
|
||||
|
||||
/* Changes:
|
||||
* 0.2.0 : start of version numbering practice
|
||||
* 0.2.2 : _("include file")
|
||||
* 0.2.6 : fix in settings loading
|
||||
* 0.2.7 : new tag system, different style of close tags
|
||||
* 0.3.0 : port of code to C++
|
||||
*/
|
||||
const Version file_version = 300; // 0.3.0
|
||||
Reference in New Issue
Block a user