AMX MOD X
Пятница, 26.04.2024, 10:11:46



Приветствую Вас Гость | RSS
[ Главная ] [ replace_all vs new_replacer :)) - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » replace_all vs new_replacer :))
replace_all vs new_replacer :))
KokaДата: Среда, 20.05.2009, 21:29:03 | Сообщение # 1
Полковник
Группа: Пользователи
Сообщений: 169
Репутация: 1
Статус: Не в сети
как определить какой быстрее, который "оффициальный", либо самописный ?

реплэйсер из string.inc

Code

stock replace_all(string[], len, const what[], const with[])
{
   new pos = 0;
     
   if ((pos = contain(string, what)) == -1)
   {
    return 0;
   }
     
   new total = 0;
   new with_len = strlen(with);
   new diff = strlen(what) - with_len;
   new total_len = strlen(string);
   new temp_pos = 0;
     
   while (replace(string[pos], len - pos, what, with) != 0)
   {
    /* jump to position after replacement */
    pos += with_len;
      
    /* update cached length of string */
    total_len -= diff;
      
    /* will the next call be operating on the last character? */
    if (pos >= total_len)
    {
     break;
    }
      
    /* find the next position from our offset */
    temp_pos = contain(string[pos], what);
      
    /* if it's invalid, we're done */
    if (temp_pos == -1)
    {
     break;
    }
      
    /* otherwise, reposition and update counters */
    pos += temp_pos;
    total++;
   }
     
   return total;
}

новый

Code
stock new_replacer(string[], len, what[], with[])
{
  static withlen, charnum = 0
  withlen = strlen(with)
   
  while(replace(string[charnum], len, what, with) != 0)
  {
   charnum += contain(string[charnum], with) + withlen
  }
}

работают вроде одинаково, кроме ретурна кол-ва замененых элементов, что поправимо.


стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...

Сообщение отредактировал Koka - Четверг, 21.05.2009, 00:13:38
 
PomanoBДата: Среда, 20.05.2009, 22:16:49 | Сообщение # 2
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
поставь в цикл раз эдак 1000 и засеки время tickcount'ом

http://romanov4400.mybrute.com
 
KokaДата: Четверг, 21.05.2009, 00:18:08 | Сообщение # 3
Полковник
Группа: Пользователи
Сообщений: 169
Репутация: 1
Статус: Не в сети
так и сделал, цикл в 1000000000 раз показал что new_replacer быстрее не на много (в 1.01785) omg хотя различие в 6953 tick'ов
Code

check
times=1000000000
null_cycle=28234
variant_odin=396422
variant_dva=389469
---result---
null cycle=28234
#1=396422, #2=389469
variant 2 bistree
v 1.01785 raz(a)

если исходник нужен, могу скинуть


стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...

Сообщение отредактировал Koka - Четверг, 21.05.2009, 01:01:50
 
PomanoBДата: Четверг, 21.05.2009, 15:34:07 | Сообщение # 4
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Давай, будет интересно посмотреть )

http://romanov4400.mybrute.com
 
KokaДата: Четверг, 21.05.2009, 17:58:18 | Сообщение # 5
Полковник
Группа: Пользователи
Сообщений: 169
Репутация: 1
Статус: Не в сети
Code

#include <amxmodx>

public plugin_init()
{
   register_plugin("Test Cycle", "1.0", "Koka")
     
   register_concmd("check", "check")
}

public check()
{
   new TIMES = 1000000000
     
   new i, null_cycle, variant_odin, variant_dva
     
   server_print("times=%d", TIMES)
     
   null_cycle = tickcount()
   for(i=0;i<TIMES;i++) {}
   null_cycle = tickcount() - null_cycle
   server_print("null_cycle=%d", null_cycle)
     
   variant_odin = tickcount()
   for(i=0;i<TIMES;i++)
   {
    static msg[] = "zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg"
    replace_all(msg, sizeof msg -1, "zomg ", "ololo")
   }
   variant_odin = tickcount() - variant_odin - null_cycle
   server_print("variant_odin=%d", variant_odin)
     
   variant_dva = tickcount()
   for(i=0;i<TIMES;i++)
   {
    static msg[] = "zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg"
    new_replacer(msg, sizeof msg -1, "zomg ", "ololo")
   }
   variant_dva = tickcount() - variant_dva - null_cycle
   server_print("variant_dva=%d", variant_dva)
     
   server_print("---result---")
   server_print("null cycle=%d", null_cycle)
   server_print("#1=%d, #2=%d", variant_odin, variant_dva)
   server_print("%s bistree", (variant_odin < variant_dva) ? "variant 1" : "variant 2")
   server_print("v %.5f raz(a)", variant_dva < variant_odin ? float(variant_odin) / float(variant_dva) : float(variant_dva) / float(variant_odin))
     
   return 1
}

stock new_replacer(string[], len, what[], with[])
{
  static withlen, charnum = 0
  withlen = strlen(with)
   
  while(replace(string[charnum], len, what, with) != 0)
  {
   charnum += contain(string[charnum], with) + withlen
  }
}


стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...

Сообщение отредактировал Koka - Четверг, 21.05.2009, 18:01:07
 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » replace_all vs new_replacer :))
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2024