mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 01:53:45 +01:00
Improve getFree*ActiveObjectId to reduce common case cpu usage drasticaly
This commit is contained in:
parent
625a4c2e66
commit
e9a4e98cb9
@ -1295,16 +1295,17 @@ bool isFreeServerActiveObjectId(u16 id,
|
|||||||
u16 getFreeServerActiveObjectId(
|
u16 getFreeServerActiveObjectId(
|
||||||
std::map<u16, ServerActiveObject*> &objects)
|
std::map<u16, ServerActiveObject*> &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(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
if(isFreeServerActiveObjectId(new_id, objects))
|
last_used_id ++;
|
||||||
return new_id;
|
if(isFreeServerActiveObjectId(last_used_id, objects))
|
||||||
|
return last_used_id;
|
||||||
|
|
||||||
if(new_id == 65535)
|
if(last_used_id == startid)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
new_id++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2296,16 +2297,17 @@ bool isFreeClientActiveObjectId(u16 id,
|
|||||||
u16 getFreeClientActiveObjectId(
|
u16 getFreeClientActiveObjectId(
|
||||||
std::map<u16, ClientActiveObject*> &objects)
|
std::map<u16, ClientActiveObject*> &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(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
if(isFreeClientActiveObjectId(new_id, objects))
|
last_used_id ++;
|
||||||
return new_id;
|
if(isFreeClientActiveObjectId(last_used_id, objects))
|
||||||
|
return last_used_id;
|
||||||
|
|
||||||
if(new_id == 65535)
|
if(last_used_id == startid)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
new_id++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user