From: sapier Date: Sun, 21 Apr 2013 13:54:29 +0000 (+0200) Subject: Improve getFree*ActiveObjectId to reduce common case cpu usage drasticaly X-Git-Url: http://81.2.79.47:8989/gitweb/?a=commitdiff_plain;h=e9a4e98cb9608e26e7dafc575856aad9da5c27da;p=zefram%2Fminetest%2Fminetest_engine.git Improve getFree*ActiveObjectId to reduce common case cpu usage drasticaly --- diff --git a/src/environment.cpp b/src/environment.cpp index fc7972b2..438c9ef4 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -1295,16 +1295,17 @@ bool isFreeServerActiveObjectId(u16 id, u16 getFreeServerActiveObjectId( std::map &objects) { - u16 new_id = 1; + //try to reuse id's as late as possible + static u16 last_used_id = 0; + u16 startid = last_used_id; for(;;) { - if(isFreeServerActiveObjectId(new_id, objects)) - return new_id; + last_used_id ++; + if(isFreeServerActiveObjectId(last_used_id, objects)) + return last_used_id; - if(new_id == 65535) + if(last_used_id == startid) return 0; - - new_id++; } } @@ -2296,16 +2297,17 @@ bool isFreeClientActiveObjectId(u16 id, u16 getFreeClientActiveObjectId( std::map &objects) { - u16 new_id = 1; + //try to reuse id's as late as possible + static u16 last_used_id = 0; + u16 startid = last_used_id; for(;;) { - if(isFreeClientActiveObjectId(new_id, objects)) - return new_id; + last_used_id ++; + if(isFreeClientActiveObjectId(last_used_id, objects)) + return last_used_id; - if(new_id == 65535) + if(last_used_id == startid) return 0; - - new_id++; } }