--- deliantra/server/common/arch.C 2011/05/01 16:58:15 1.108 +++ deliantra/server/common/arch.C 2018/11/27 18:50:22 1.118 @@ -1,39 +1,40 @@ /* * This file is part of Deliantra, the Roguelike Realtime MMORPG. - * - * Copyright (©) 2005,2006,2007,2008,2009,2010,2011 Marc Alexander Lehmann / Robin Redeker / the Deliantra team + * + * Copyright (©) 2017,2018 Marc Alexander Lehmann / the Deliantra team + * Copyright (©) 2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016 Marc Alexander Lehmann / Robin Redeker / the Deliantra team * Copyright (©) 2002 Mark Wedel & Crossfire Development Team * Copyright (©) 1992 Frank Tore Johansen - * + * * 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 */ #include +#include -#include +#include -#include -#include +#include archetype *loading_arch; // ugly flag to object loader etc. to suppress/request special processing arch_ptr archetype::empty; // the hashtable -typedef std::tr1::unordered_map +typedef ska::flat_hash_map < const char *, arch_ptr, @@ -425,8 +426,6 @@ } { - auto (at, parts.begin ()); - archetype *new_head = parts.front (); archetype *old_head = find (new_head->archname); @@ -438,9 +437,9 @@ } // check that all archetypes belong to the same old object or are new - for (auto (at, parts.begin ()); at != parts.end (); ++at) + for (auto &&at : parts) { - archetype *new_part = *at; + archetype *new_part = at; archetype *old_part = find (new_part->archname); if (old_part && old_part->head_ () != old_head) @@ -455,7 +454,7 @@ new_head->max_x = new_head->x; archetype *less = new_head; - for (auto (p, parts.begin () + 1); p != parts.end (); ++p) + for (auto &&p = parts.begin () + 1; p != parts.end (); ++p) { archetype *at = *p; @@ -480,8 +479,8 @@ } fail: - for (auto (p, parts.begin ()); p != parts.end (); ++p) - (*p)->destroy (); + for (auto &&at : parts) + at->destroy (); return 0; } @@ -497,10 +496,8 @@ archetype::commit_load () { // unlink old archetypes and link in new ones */ - for (auto (p, postponed_arch.begin ()); p != postponed_arch.end (); ++p) + for (auto &&at : postponed_arch) { - archetype *at = *p; - if (archetype *old = find (at->archname)) old->unlink (); @@ -513,13 +510,13 @@ postponed_arch.clear (); // now resolve arch references - for (auto (p, postponed_arch_ref.begin ()); p != postponed_arch_ref.end (); ++p) + for (auto &&p : postponed_arch_ref) // not yet C++17 { - arch_ptr *ap = p->first; - archetype *at = find (p->second); + arch_ptr *ap = p.first; + archetype *at = find (p.second); if (!at) - LOG (llevError, "unable to resolve postponed arch reference to '%s'", &p->second); + LOG (llevError, "unable to resolve postponed arch reference to '%s'", &p.second); *ap = at; } @@ -532,7 +529,7 @@ void archetype::gc () { - int cnt = max (1, min (allarch.size () / 128, dirtycnt)); + int cnt = max (1, min (allarch.size () / 128, dirtycnt)); dirtycnt = max (0, dirtycnt - cnt); do