Make(delphi) ver(4.04 build 184) P.S: у меня результаты таковы: time1 =0 Add(MainForm,1842996,314,231) { Width=313 Height=521 Caption="Т Е С Т" BorderStyle=1 Position=1 link(onCreate,14336781:doLoad,[]) } Add(Button,14588975,189,273) { Left=120 Top=445 Font=[MS Sans Serif,10,1,0,1] Caption="start" Point(doVisible) link(onClick,14186092:doEvent1,[]) } Add(Hub,14186092,245,273) { OutCount=5 link(onEvent1,4047973:doWork1,[(271,279)(271,267)(128,267)(128,279)]) link(onEvent2,5889051:doPos,[(337,286)(337,342)]) link(onEvent3,6506667:doPos,[(329,293)(329,412)]) link(onEvent4,15544549:doWork2,[]) link(onEvent5,4047973:doWork2,[(273,307)(273,325)(128,325)(128,286)]) } Add(ChanelToIndex,4047973,140,273) { link(onIndex,14588975:doVisible,[]) } Add(StrList,14336781,371,217) { FileName="www.txt" Strings=#7:www.txt| } Add(Label,6298121,427,231) { Left=5 Top=50 Width=299 Height=17 Font=[MS Sans Serif,8,0,255,1] Caption="("Шевченко","пер","66000008000017900","624350","6615","","65448000000");" } Add(Label,7440477,497,231) { Left=10 Top=30 Width=35 Height=17 Caption="Ищем" } Add(Label,12326515,539,231) { Left=20 Top=5 Width=279 Height=24 Font=[MS Sans Serif,12,1,0,1] Caption="Размер строки 81 437 774 байта" } Add(InlineCode,5889051,371,336) { @Hint=#19:Current Boyer-Moore| WorkPoints=#5:doPos| EventPoints=#5:onPos| DataPoints=#4:text|6:sbtext| Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses Windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|9: public|33: onPos,text,sbtext:THI_Event;|5: |50: procedure doPos(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|71:function PosEx2(const SubStr, S: string; Offset: Integer = 1): Integer;|3:var|25: Ps, lp, ls, i: integer;|31: BMT: array[Char] of integer; |5:begin|23: lp := Length(SubStr);|21: ls := Length(S); |2: |22: for i := 0 to 255 do|27: BMT[char(i)] := lp; |27: for i := 1 to (lp - 1) do|29: BMT[SubStr[i]] := lp - i;|0:|24: Ps := Offset + lp - 1;|0:|19: while Ps <= ls do|31: if SubStr[lp] <> S[Ps] then|27: Ps := Ps + BMT[S[Ps]]|8: else|29: for i := lp downto 1 do|43: if SubStr[i] <> S[Ps - lp + i] then|13: begin|32: Ps := Ps + BMT[S[Ps]];|16: Break;|11: end|26: else if i = 1 then|13: begin|32: Result := Ps - lp + 1;|15: Exit;|12: end;|14: Result := 0;|4:end;|0:|28:procedure THiAsmClass.doPos;|3:var|16: sst,sb:string;|20: sp, ep, cnt:int64;|16: ps: integer; |5:begin|37: Sb := ReadString(_Data,sbtext,'');|36: Sst := ReadString(_Data,text,'');|31: QueryPerformanceCounter(sp);|26: Ps := PosEx2(sb,sst,3);|31: QueryPerformanceCounter(ep);|34: QueryPerformanceFrequency(cnt);|26: cnt := cnt div 1000000;|76: _hi_onEvent(onPos, int2str(Ps) + ';' + int2str(integer((ep-sp) div cnt)));|4:end;|0:|4:end.| link(onPos,13825338:doString,[]) link(text,10219259:Var2,[]) link(sbtext,10171368:Var1,[(384,320)]) AddHint(-103,46,112,13,@Hint) } Add(StringTable,13226389,539,294) { Top=80 Width=305 Height=350 Columns=#6:Имя=95|7:Позиция|17:Время (Мksec)=100| Grid=0 } Add(HubEx,15544549,518,294) { link(onEvent,13226389:doAdd,[]) } Add(FormatStr,13825338,469,336) { Mask="Nesco;%1" link(onFString,16377225:doWork2,[]) } Add(InlineCode,6506667,420,406) { @Hint=#14:NewPosEx (Asm)| WorkPoints=#5:doPos| EventPoints=#5:onPos| DataPoints=#4:text|5:sbstr| Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses Windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|9: public|16: text,sbstr,|21: onPos:THI_Event;|5: |50: procedure doPos(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|71:function PosEx2(const S, SubStr: string; Offset: integer = 1): integer;|3:asm|16: PUSH EDI|16: PUSH ESI|16: PUSH EBX|16: PUSH EAX|18: OR EAX,EAX|14: JE @@2|18: OR EDX,EDX|14: JE @@2|15: DEC ECX|14: JS @@2|23: MOV EBX,[EAX-4]|19: SUB EBX,ECX|15: JLE @@2|23: SUB EBX,[EDX-4]|14: JL @@2|15: INC EBX|19: ADD EAX,ECX|19: MOV ECX,EBX|23: MOV EBX,[EDX-4]|15: DEC EBX|19: MOV EDI,EAX|0:|19:@@1: MOV ESI,EDX|13: LODSB|19: REPNE SCASB|15: JNE @@2|19: MOV EAX,ECX|16: PUSH EDI|19: MOV ECX,EBX|18: REPE CMPSB|15: POP EDI|19: MOV ECX,EAX|15: JNE @@1|23: LEA EAX,[EDI-1]|15: POP EDX|19: SUB EAX,EDX|15: INC EAX|15: JMP @@3|0:|15:@@2: POP EAX|19: XOR EAX,EAX|8: |15:@@3: POP EBX|15: POP ESI|15: POP EDI|4:end;|0:|28:procedure THiAsmClass.doPos;|3:var|16: sst,sb:string;|20: sp, ep, cnt:int64;|14: ps: integer;|5:begin|36: Sb := ReadString(_Data,sbstr,'');|36: Sst := ReadString(_Data,text,'');|31: QueryPerformanceCounter(sp);|29: Ps := PosEx2(sst,sb,3); |31: QueryPerformanceCounter(ep);|34: QueryPerformanceFrequency(cnt);|26: cnt := cnt div 1000000;|76: _hi_onEvent(onPos, int2str(Ps) + ';' + int2str(integer((ep-sp) div cnt)));|4:end;|0:|4:end.| link(onPos,8643970:doString,[]) link(text,10219259:Var3,[(426,306)]) link(sbstr,10171368:Var2,[]) AddHint(-148,38,96,13,@Hint) } Add(FormatStr,8643970,469,406) { Mask="NewPosEx (Asm);%1" link(onFString,16377225:doWork3,[(522,412)]) } Add(HubEx,16377225,518,336) { Angle=3 link(onEvent,15544549:doWork3,[]) } Add(GetDataEx,10219259,371,301) { link(Data,14336781:Text,[]) } Add(GetDataEx,10171368,427,315) { link(Data,6298121:Caption,[]) }