YashasSamaga

Untitled

Feb 6th, 2017
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.59 KB | None | 0 0
  1. cell AMX_NATIVE_CALL algo_all_of(AMX* amx, cell* params)
  2.     {
  3.         cell* start = NULL;
  4.         amx_GetAddr(amx, params[1], &start);
  5.  
  6.         cell* end = start + params[2];
  7.         error_if(end < start, "[PLE] algorithm>> all_of: 'numcells' paramter (%d) below zero", params[2]);
  8.  
  9.         cell* func = NULL;
  10.         amx_GetAddr(amx, params[3], &func);
  11.         functionID fid(func);
  12.         error_if(!fid.IsFunctionValid(1), "[PLE] algorithm>> all_of: function object 'func' is not valid");
  13.  
  14.         while (start != end)
  15.         {
  16.             if (!ExecuteFunctionCC1O2(amx, &fid, *start, func)) return false;
  17.             start++;
  18.         }
  19.         return true;
  20.     }
  21. l ExecuteFunctionCC1O2(AMX *amx, functionID *fid, cell cparam, cell oparam[])
  22. {
  23.     cell retval = 0;
  24.     switch (fid->type)
  25.     {
  26.     case FUNCTION_ID_TYPE_PUBLIC:
  27.     {
  28.         switch (fid->argc)
  29.         {
  30.         case 1:
  31.             amx_Push(amx, cparam);
  32.             break;
  33.         case 2:
  34.             if (fid->IsFlagSet(FUNCTION_FLAG_BIND1))
  35.             {
  36.                 amx_Push(amx, cparam);
  37.                 amx_Push(amx, oparam[2]);
  38.             }
  39.             else if (fid->IsFlagSet(FUNCTION_FLAG_BIND2))
  40.             {
  41.                 amx_Push(amx, oparam[3]);
  42.                 amx_Push(amx, cparam);
  43.             }
  44.             break;
  45.         }
  46.         amx_Exec(amx, &retval, fid->address);
  47.         break;
  48.     }
  49.     case FUNCTION_ID_TYPE_DEFAULT:
  50.     {
  51.         switch (fid->argc)
  52.         {
  53.         case 1:
  54.             retval = unary_functions[fid->address](cparam);
  55.             break;
  56.         case 2:
  57.             if (fid->IsFlagSet(FUNCTION_FLAG_BIND1))
  58.                 retval = binary_functions[fid->address](oparam[2], cparam);
  59.             else if (fid->IsFlagSet(FUNCTION_FLAG_BIND2))
  60.                 retval = binary_functions[fid->address](cparam, oparam[3]);
  61.             break;
  62.         }
  63.         break;
  64.     }
  65.     }
  66.     if (fid->IsFlagSet(FUNCTION_FLAG_NOT)) return !retval;
  67.     return retval;
  68. }
Add Comment
Please, Sign In to add comment