Guest User

Untitled

a guest
Jan 8th, 2014
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 2.49 KB | None | 0 0
  1. #include <a_samp>
  2. #include <YSI\y_va>
  3.  
  4. #define SCM1(%0,%1,%2,%3) \
  5.         do \
  6.         { \
  7.             new _str[145]; \
  8.             format(_str,sizeof(_str),%2,%3); \
  9.             SendClientMessage(%0, %1, _str); \
  10.         } \
  11.         while( FALSE )
  12.  
  13.  
  14. main()
  15. {
  16.     new StartTick[3], executemessage[] = "Hello, SA-MP";
  17.  
  18.     StartTick[0] = GetTickCount();
  19.     for(new i = 0; i < 100000; i++)
  20.     {
  21.         SCM1(i, -1, "%s", executemessage);
  22.     }
  23.  
  24.     StartTick[1] = GetTickCount();
  25.     for(new x = 0; x < 100000; x++)
  26.     {
  27.         SCM2(x, -1, "%s", executemessage);
  28.     }
  29.  
  30.     StartTick[2] = GetTickCount();
  31.     for(new x = 0; x < 100000; x++)
  32.     {
  33.         SCM3(x, -1, "%s", executemessage);
  34.     }
  35.  
  36.  
  37.     printf( "SCM1 took %i ms to send 100,000 messages | Message is '%s'", (GetTickCount( ) - StartTick[ 0 ]), executemessage );
  38.     printf( "SCM2 took %i ms to send 100,000 messages | Message is '%s'", (GetTickCount( ) - StartTick[ 1 ]), executemessage );
  39.     printf( "SCM3 took %i ms to send 100,000 messages | Message is '%s'", (GetTickCount( ) - StartTick[ 2 ]), executemessage );
  40. }
  41.  
  42. stock SCM3(playerid, color, const string[], va_args<>)
  43. {
  44.     new
  45.         _str[145];
  46.     va_format(_str, sizeof (_str), string, va_start<3>);
  47.     return SendClientMessage(playerid, color, string);
  48. }
  49.  
  50. stock SCM2(playerid, color, fstring[], {Float, _}:...)
  51. {
  52.     #define BYTES_PER_CELL 4
  53.     static const
  54.         ARGS = 3;
  55.     new n = (numargs() - ARGS) * BYTES_PER_CELL ;
  56.     if (n)
  57.     {
  58.         new message[128], arg_start, arg_end;
  59.         #emit CONST.alt        fstring
  60.         #emit LCTRL          5
  61.         #emit ADD
  62.         #emit STOR.S.pri       arg_start
  63.  
  64.         #emit LOAD.S.alt       n
  65.         #emit ADD
  66.         #emit STOR.S.pri       arg_end
  67.  
  68.         do
  69.         {
  70.             #emit LOAD.I
  71.             #emit PUSH.pri
  72.             arg_end -= BYTES_PER_CELL ;
  73.             #emit LOAD.S.pri     arg_end
  74.         }
  75.         while (arg_end > arg_start);
  76.  
  77.         #emit PUSH.S         fstring
  78.         #emit PUSH.C         128
  79.         #emit PUSH.ADR        message
  80.  
  81.         n += BYTES_PER_CELL  * 3;
  82.         #emit PUSH.S         n
  83.         #emit SYSREQ.C        format
  84.  
  85.         n += BYTES_PER_CELL ;
  86.         #emit LCTRL          4
  87.         #emit LOAD.S.alt       n
  88.         #emit ADD
  89.         #emit SCTRL          4
  90.  
  91.         return SendClientMessage(playerid, color, message);
  92.     }
  93.     else
  94.     {
  95.         return SendClientMessage(playerid, color, fstring);
  96.     }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment