AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

LastPos Varianten

Ein Thema von relocate · begonnen am 18. Feb 2013 · letzter Beitrag vom 18. Feb 2013
Antwort Antwort
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.111 Beiträge
 
Delphi XE2 Professional
 
#1

AW: LastPos Varianten

  Alt 18. Feb 2013, 14:55
Oder noch mal deutlich schneller so:
(Nicht wirklich optimiert und nur flüchtig überprüft)

Delphi-Quellcode:
FUNCTION LastPosA(const SearchFor,SearchIn:AnsiString):integer;
asm
               test eax,eax
               je @Ret
               test edx,edx
               je @ReturnZero
               cmp eax,edx
               je @ReturnOne // Strings identisch
               push ebp
               push ebx
               push edi
               push esi
               mov ecx,[eax-4] // Length(SearchFor)
               mov ebp,[edx-4] // Length(SearchIn)
               sub ebp,ecx
               js @Fail // SearchFor länger als Searchin
               mov bl,[eax] // erstes Zeichen aus SearchFor
               sub ecx,1
               je @CharLoop
               lea eax,[eax+ecx+1] // hinter SearchFor
               neg ecx
@OuterLoop: cmp [edx+ebp],bl
               je @FirstFound
@NextOuter: sub ebp,1
               jns @OuterLoop
               jmp @Fail
@FirstFound: lea edi,[edx+ebp+1]
               sub edi,ecx
               mov esi,ecx
@InnerLoop: mov bh,[eax+esi]
               cmp bh,[edi+esi]
               jne @NextOuter
               add esi,1
               jne @InnerLoop
               jmp @Found
@CharLoop: cmp [edx+ebp],bl
               je @Found
               sub ebp,1
               jns @CharLoop
@Fail: xor eax,eax
               jmp @End
@ReturnZero: xor eax,eax
               jmp @Ret
@ReturnOne: mov eax,1
               jmp @Ret
@Found: lea eax,[ebp+1]
@End: pop esi
               pop edi
               pop ebx
               pop ebp
@Ret:
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
relocate

Registriert seit: 26. Mai 2009
60 Beiträge
 
#2

AW: LastPos Varianten

  Alt 18. Feb 2013, 18:20
@Bjoerk

Ich kann zwar etwas Assembler, aber um so eine Funktion zu entwickeln/verbessern reicht es kaum.
Die Delphi Variante von dir ist auf meinem AMD aber langsamer als die Assembler Variante, auf einem Intelprozessor (aber kein P4) ist sie schneller.

@Amateurprofi
Diese Variante ist wirklich fix, die schnellste auf meinem Intel und AMD Rechner.

Vielen Dank!

Es ist echt erstaunlich manchmal.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz