From 2c68c8304c6ed752d442cd71a42d81207c26a2f8 Mon Sep 17 00:00:00 2001 From: uid68803 Date: Tue, 13 Jan 2004 00:02:24 +0000 Subject: [PATCH] fixed WML parser bug --- src/config.cpp | 11 +++++++++-- src/server/server.cpp | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/config.cpp b/src/config.cpp index 1e91bed4dc7..f3237a7dd48 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -544,8 +544,7 @@ namespace { size_t config::write_size() const { size_t res = 0; - for(std::map::const_iterator i = values.begin(); - i != values.end(); ++i) { + for(string_map::const_iterator i = values.begin(); i != values.end(); ++i) { if(i->second.empty() == false) { res += i->first.size() + AttributeEquals.size() + i->second.size() + AttributePostfix.size(); @@ -699,6 +698,14 @@ void config::remove_child(const std::string& key, size_t index) const child_pos pos(children.find(key),index); ordered_children.erase(std::remove(ordered_children.begin(),ordered_children.end(),pos),ordered_children.end()); + //decrement all indices in the ordering that are above this index, since everything + //is getting shifted back by 1. + for(std::vector::iterator i = ordered_children.begin(); i != ordered_children.end(); ++i) { + if(i->pos->first == key && i->index > index) { + i->index--; + } + } + //remove from the child map child_list& v = children[key]; assert(index < v.size()); diff --git a/src/server/server.cpp b/src/server/server.cpp index 3624d5123f1..8e96da61bfd 100644 --- a/src/server/server.cpp +++ b/src/server/server.cpp @@ -247,8 +247,8 @@ void server::run() const config::child_iterator desc = std::find(vg.first,vg.second,g->description()); if(desc != vg.second) { - delete *desc; gamelist->remove_child("game",desc - vg.first); + delete *desc; } //put the players back in the lobby and send