Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.02.08;
Скачать: CL | DM;

Вниз

DELPHi На ubuntu   Найти похожие ветки 

 
Sha ©   (2008-12-15 17:16) [80]

> Cobalt ©   (15.12.08 14:05) [76]

http://new.fastcodeproject.org/fastcode-challenges/challenges/37-challenges/45-ansi-stringreplace.html

разница 9-15 раз в зависимости от процессора


 
atruhin ©   (2008-12-15 17:22) [81]

> А можно на эту функцию взглянуть?

Функцию писал сам, но саму идею однопроходного поиска с сохранением позиций в стеке, где то подсмотрел.
scPosStr, scCopyMem ассемблерные ускоренные аналоги стандартных, где то брал готовые.

function scReplaceStr(const SourceString, FindString, ReplaceString: string): string;
var
 P,PS: PChar;
 L,L1,L2,Cnt: Integer;
 I,J,K,M: Integer;
begin
 L1 := Length(FindString);
 Cnt := 0;
 I := scPosStr(FindString,SourceString,1);
 while I <> 0 do begin
   Inc(I,L1);
   asm
     PUSH    I
   end;
   Inc(Cnt);
   I := scPosStr(FindString,SourceString,I);
 end;
 if Cnt <> 0 then begin
   L := Length(SourceString);
   L2 := Length(ReplaceString);
   J := L+1;
   Inc(L,(L2-L1)*Cnt);
   if L <> 0 then begin
     SetString(Result,nil,L);
     P := Pointer(Result);
     Inc(P, L);
     PS := Pointer(LongWord(SourceString)-1);
     for I := 0 to Cnt-1 do begin
       asm
         POP     K
       end;
       M := J-K;
       if M > 0 then begin
         Dec(P,M);
         scCopyMem(@PS[K],P,M);
       end;
       Dec(P,L2);
       scCopyMem(Pointer(ReplaceString),P,L2);
       J := K-L1;
     end;
     Dec(J);
     if J > 0
       then scCopyMem(Pointer(SourceString),Pointer(Result),J);
   end else begin
     Result := "";
     for i:=1 to Cnt do asm pop K end;
   end
 end else Result := SourceString;
end;


 
atruhin ©   (2008-12-15 17:24) [82]

> [79] Sapersky   (15.12.08 17:08)
> В BDS2006 и далее фасткодовские функции (все или нет - не
> в курсе) используются в качестве стандартных.

Не знаю откуда информация, но я сравнивал в RadStudio 2007 со свеми апдейтами


 
Sapersky   (2008-12-15 17:48) [83]

Сейчас посмотрел 2006-й - да, похоже, StringReplace не меняли.
Судя по system.pas - от фасткода взяли Move, FillChar, Pos, _lldiv (64-bit signed division), возможно, есть ещё что-то в других модулях.



Страницы: 1 2 3 вся ветка

Текущий архив: 2009.02.08;
Скачать: CL | DM;

Наверх




Память: 0.6 MB
Время: 0.02 c
2-1229958159
Broflovski
2008-12-22 18:02
2009.02.08
Занят ли файл другим приложением


2-1230138119
Евгений Р.
2008-12-24 20:01
2009.02.08
Цвет tLabel


2-1230381853
smi
2008-12-27 15:44
2009.02.08
Маскировка


2-1230528308
charoey_mag
2008-12-29 08:25
2009.02.08
Доступ к AD через ADO


15-1229270511
KilkennyCat
2008-12-14 19:01
2009.02.08
Схема IPAQ H2200. После двух суток поиска.