Page 1 sur 1

FindString() - Traduction en ASM

Publié : mer. 01/mars/2006 0:46
par Flype
Est-ce que quelqu'un peut m'aider à traduire ce petit bout de code rigoureusement en ASM ?

J'ai fais cette fonction comme çà pour tester et je soupconne qu'en asm ce pourrait etre plus rapide que la fonction PB.

Le gain serait sans doute pas énorme, juste un petit défi ... :twisted:

Code : Tout sélectionner

Procedure.l FindString2(*StrMain.l, *StrFind.l, CharPos.l = 1, CharMask.c = '*')
 
  *hFind.CHARACTER = *StrFind
  *hMain.CHARACTER = *StrMain + CharPos - 1
 
  Repeat
    If *hFind\c = 0
      ProcedureReturn (1+((*hMain-(*hFind-*StrFind))-*StrMain))
    EndIf
    If *hMain\c = 0
      ProcedureReturn #False
    ElseIf (*hMain\c = *hFind\c) Or (*hFind\c = CharMask)
      *hFind + 1
    Else
      *hFind = *StrFind
    EndIf
    *hMain + 1
  ForEver
 
EndProcedure

;------------

myStr.s = "For testing purpose: Hello, i'm a purebasic string :-)"
myFind.s = "p___b___c"

Debug FindString(myStr,myFind,1)
Debug FindString2(@myStr,@myFind,1,'_')

sympa

Publié : sam. 04/mars/2006 12:57
par Thierry 31
sauf que chez moi (3.94) à marche pas :( , il manquerait la déclaration d'une structure...

ce qui me brancherait bien, serait d'écrire une lib pour PB traitant les expréssions régulières.

http://nicolasj.developpez.com/articles/regex/

je recherche depuis qq temps le/les algorithmes types, mais je ne trouve rien on the ouaibe. Je vois grosso modo comment faire, mais je suppose qu'il ya des gens plus malins que moi, qui ont déjà réfléchi à la question.

suite

Publié : sam. 04/mars/2006 12:59
par Thierry 31
LIB en asm bien sur :)

Re: sympa

Publié : sam. 04/mars/2006 14:41
par Flype
Thierry 31 a écrit :sauf que chez moi (3.94) à marche pas :( , il manquerait la déclaration d'une structure...

ce qui me brancherait bien, serait d'écrire une lib pour PB traitant les expréssions régulières.

http://nicolasj.developpez.com/articles/regex/

je recherche depuis qq temps le/les algorithmes types, mais je ne trouve rien on the ouaibe. Je vois grosso modo comment faire, mais je suppose qu'il ya des gens plus malins que moi, qui ont déjà réfléchi à la question.
normal c'est pour pb4
mais c'est tout simple à transformer en pb3.94:

Code : Tout sélectionner

Procedure.l FindString2(*StrMain.l, *StrFind.l, CharPos.l, CharMask.b)
 
  *hFind.BYTE = *StrFind
  *hMain.BYTE = *StrMain + CharPos - 1
 
  Repeat
    If *hFind\b = 0
      ProcedureReturn (1+((*hMain-(*hFind-*StrFind))-*StrMain))
    EndIf
    If *hMain\b = 0
      ProcedureReturn #False
    ElseIf (*hMain\b = *hFind\b) Or (*hFind\b = CharMask)
      *hFind + 1
    Else
      *hFind = *StrFind
    EndIf
    *hMain + 1
  ForEver
 
EndProcedure

;------------

myStr.s = "For testing purpose: Hello, i'm a purebasic string :-)"
myFind.s = "p___b___c"

Debug FindString(myStr,myFind,1)
Debug FindString2(@myStr,@myFind,1,'_')
et c'est vrai qu'un lib regex serait la bienvenue.