From e9a4e98cb9608e26e7dafc575856aad9da5c27da Mon Sep 17 00:00:00 2001 From: sapier Date: Sun, 21 Apr 2013 15:54:29 +0200 Subject: Improve getFree*ActiveObjectId to reduce common case cpu usage drasticaly --- src/environment.cpp | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/environment.cpp b/src/environment.cpp index fc7972b2c..438c9ef4f 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++; } } -- cgit v1.2.3