make findunitr be O(1) instead of O(#r->units)

This commit is contained in:
Enno Rehling 2015-09-09 13:29:58 +02:00
parent 5faf642b9c
commit 60111282b3
2 changed files with 12 additions and 15 deletions

View File

@ -2640,8 +2640,9 @@ static void steal_cmd(unit * u, struct order *ord, request ** stealorders)
return; return;
} }
id = read_unitid(u->faction, r); id = read_unitid(u->faction, r);
u2 = findunitr(r, id); if (id>0) {
u2 = findunitr(r, id);
}
if (u2 && u2->region == u->region) { if (u2 && u2->region == u->region) {
f = u2->faction; f = u2->faction;
} }

View File

@ -97,19 +97,6 @@ attrib_type at_creator = {
/* Rest ist NULL; temporaeres, nicht alterndes Attribut */ /* Rest ist NULL; temporaeres, nicht alterndes Attribut */
}; };
unit *findunitr(const region * r, int n)
{
unit *u;
/* findunit regional! */
for (u = r->units; u; u = u->next)
if (u->no == n)
return u;
return 0;
}
unit *findunit(int n) unit *findunit(int n)
{ {
if (n <= 0) { if (n <= 0) {
@ -118,6 +105,15 @@ unit *findunit(int n)
return ufindhash(n); return ufindhash(n);
} }
unit *findunitr(const region * r, int n)
{
unit *u;
/* findunit regional! */
assert(n>0);
u = ufindhash(n);
return (u && u->region==r)?u:0;
}
unit *findunitg(int n, const region * hint) unit *findunitg(int n, const region * hint)
{ {