Главная страница
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.016 c
15-1229062972
31512
2008-12-12 09:22
2009.02.08
Вот такой бубен себе хочу!


15-1229263057
Sergey Masloff
2008-12-14 16:57
2009.02.08
оффтоп и наглая реклама. Продам гитару


3-1214292059
MsGuns
2008-06-24 11:20
2009.02.08
MySQL 5.0 - "клон" Interbase ?


4-1204707100
alexnov
2008-03-05 11:51
2009.02.08
Как получить инфу о модели монитора без дров для него?


2-1230036176
workbench
2008-12-23 15:42
2009.02.08
FTP через dial-up и LAN