PHP код:
#include <a_samp>
#include <foreach>
new AzIterId;
#define AzIterInit:%0[%1] %0[%1], %0Size = -1
#define AzIterAdd(%0,%1) %0[++%0Size]=%1
#define AzIterDel(%0,%1);; \
for(new AZIterTempVar = %0Size; 0 <= AZIterTempVar; AZIterTempVar--) \
{if(%0[AZIterTempVar] == %1){\
%0[AZIterTempVar] = %0[%0Size--]; break;}}
#define AzIterSize(%0) %0Size
#define PROFILING_ITERS 10000
#define ARR_ITERS 1000
#define ARR_ITER_DEL 300
#define tforeach(%0) for(new _i, %0=Players[_i]; _i <players; %0=Players[++_i])
new AzIterInit:it1[ARR_ITERS], AzIterInit:it2[ARR_ITERS];
new Players[ARR_ITERS], players, Players1[ARR_ITERS], players1;
new id, tick, tick1, var, iter1, iter2, iter3;
new Iterator:pforeach<ARR_ITERS>, Iterator:pforeach1<ARR_ITERS>;
main()
{
printf("=============Array Size %d\n", ARR_ITERS);
print("=============Test speed [add]\n");
tick = GetTickCount();
for(new i = 0;i < ARR_ITERS; i++)
{
Iter_Add(pforeach, i);
}
tick1 = GetTickCount();
printf("Foreach add ====== %d",tick1-tick);
tick = GetTickCount();
for(new i = 0;i < ARR_ITERS; i++)
{
Players[players++]=i;
}
tick1 = GetTickCount();
printf("Tracker1 add ===== %d",tick1-tick);
tick = GetTickCount();
for(new i = 0;i < ARR_ITERS; i++)
{
AzIterAdd(it1,i);
}
tick1 = GetTickCount();
printf("MyIterator add === %d",tick1-tick);
print("\n=============Test speed [remove]\n");
tick = GetTickCount();
for(new i = 0;i < ARR_ITER_DEL; i++)
{
id = random(ARR_ITERS);
Iter_Remove(pforeach, id);
}
tick1 = GetTickCount();
printf("Foreach remove ====== %d",tick1-tick);
tick = GetTickCount();
for(new i = 0;i < ARR_ITER_DEL; i++)
{
id = random(ARR_ITERS);
for(new j=0;j<players;j++)
{
if(Players[j]==id)
{
Players[j]=Players[--players];
Players[players]=-1;
break;
}
}
}
tick1 = GetTickCount();
printf("Tracker1 remove ===== %d",tick1-tick);
tick = GetTickCount();
for(new i = 0;i < ARR_ITER_DEL; i++)
{
id = random(ARR_ITERS);
AzIterDel(it1, id);
}
tick1 = GetTickCount();
printf("MyIterator remove === %d",tick1-tick);
print("\n=================New=================\n");
print("=============Test speed [add]");
tick = GetTickCount();
for(new i = 0;i < ARR_ITERS; i++)
{
Iter_Add(pforeach1, i);
}
tick1 = GetTickCount();
printf("Foreach add ====== %d",tick1-tick);
tick = GetTickCount();
for(new i = 0;i < ARR_ITERS; i++)
{
Players1[players1++]=i;
}
tick1 = GetTickCount();
printf("Tracker1 add ===== %d",tick1-tick);
tick = GetTickCount();
for(new i = 0;i < ARR_ITERS; i++)
{
AzIterAdd(it2,i);
}
tick1 = GetTickCount();
printf("MyIterator add === %d",tick1-tick);
//=======================
for(new i = 0;i < ARR_ITER_DEL; i++)
{
id = random(ARR_ITERS);
Iter_Remove(pforeach1, id);
for(new j=0;j<players1;j++)
{
if(Players1[j]==id)
{
Players1[j]=Players1[--players1];
Players1[players1]=-1;
break;
}
}
AzIterDel(it2, id);
}
print("\n=============Test Iterate");
printf("=============Connected player %d\n=============Remove random player %d\n=============Profiling iters %d\n",ARR_ITERS, ARR_ITER_DEL,PROFILING_ITERS);
tick = GetTickCount();
for(new i=0;i<PROFILING_ITERS;i++){
foreach(new var:pforeach1){
iter1++;
}
}
tick1 = GetTickCount();
printf("Foreach Iterate ====== %d == iterate %d",tick1-tick, iter1);
tick = GetTickCount();
for(new i=0;i<PROFILING_ITERS;i++){
tforeach(x)
{
iter2++
#pragma unused x
}
}
tick1 = GetTickCount();
printf("Tracker1 Iterate ===== %d == iterate %d",tick1-tick, iter2);
tick = GetTickCount();
for(new i=0;i<PROFILING_ITERS;i++){
for(new var, AzIterId = it2Size; 0 <= AzIterId; AzIterId--){
#emit const.alt it2
#emit lidx
#emit stor.s.pri var
iter3++;
}
}
tick1 = GetTickCount();
printf("MyIterator Iterate === %d == iterate %d",tick1-tick, iter3);
print("=================END=================");
}
Плз результаты из server_log.txt, или скрин консоли в тему...