En GFA, y a-t-il un moyen plus rapide que BYTE / CARD / LONG pour lire une donnée en mémoire ?
J'ai une boucle WHILE...WEND pour faire une recherche avec BYTE{adresse%} mais je trouve pas ça super rapide.
Des indices ?

Strider :
Salut
En GFA, y a-t-il un moyen plus rapide que BYTE / CARD / LONG pour lire une donnée en mémoire ?
J'ai une boucle WHILE...WEND pour faire une recherche avec BYTE{adresse%} mais je trouve pas ça super rapide.
Des indices ?![]()
WHILE position% < maximum% IF BYTE{position%}=90 AND BYTE{ADD(position%,1)}=80 ... etc ... END IF ADD position%,1 WEND
Rajah Lone :
@Strider : OUI !!!!!!!
surtout là, INT{position%}=truc&, avec le truc& à base de 90+80 (genre truc&=CVI(chr$(90)+chr$(80) ?) que tu auras défini EN DEHORS de ton WHILE-WEND.
Tu incrémentes de 2, et comme ça une seule lecture, sur une adresse paire (pas bien de lire sur les impaires, ça lui fait faire des manips qui consomme du temps, il me semble).
Et puis, un ADD position%,1 c'est inutile, il vaut mieux un "INC position%" si le décalage n'est que de 1.
WHILE position% < maximum% IF BYTE{position%}=90 IF BYTE{SUCC(position%)}=80 ... etc ... END IF END IF INC position% WEND
WHILE position% < maximum% IF BYTE{position%}=90 AND BYTE{ADD(position%,1)}=80 AND BYTE{ADD(position%,2)}=70 AND BYTE{ADD(position%,3)}=60 ' traitement END IF ADD position%,2 WEND
WHILE position% < maximum% IF BYTE{position%}=90 AND BYTE{ADD(position%,1)}=80 AND BYTE{ADD(position%,2)}=70 AND BYTE{ADD(position%,3)}=60 ' traitement END IF ADD position%,2 WEND
WHILE position% < maximum% IF LONG{position%}=recherche% ' traitement END IF ADD position%,2 WEND
recherche1&=CVI('SN') recherche2&=CVI('DH') WHILE position% < maximum% IF INT{position%}=recherche1& IF INT{ADD(position%,2)}=recherche2& ' traitement END IF END IF ADD position%,2 WEND
Rajah Lone :
t'as essayé avec ?
recherche1&=CVI('SN') recherche2&=CVI('DH') WHILE position% < maximum% IF INT{position%}=recherche1& IF INT{ADD(position%,2)}=recherche2& ' traitement END IF END IF ADD position%,2 WEND
Rajah Lone
'autre part, j'ai jamais dit qu'un position%+2 était plus rapide qu'un ADD(position%,2).
C'est l'instruction (et pas la fonction) ADD position%,2 qui est plus rapide que position%=position%+2
Strider :
Les deux premiers codes donnent les MEMES résultats, contrairement à ce que Rajah et moi croyions![]()
ADD(position%,1) -> position%+1 ADD(position%,2) -> position%+2 ADD(position%,3) -> position%+3
for i%=position% to maximun% IF BYTE{i%}=90 AND BYTE{ADD(i%,1)}=80 AND BYTE{ADD(i%,2)}=70 AND BYTE{ADD(i%,3)}=60 ' traitement END IF next i%
for i%=position% to maximun% step 4 IF long(i%)=$xxxx ' traitement END IF next i%
Rajah Lone :
@GT Distrait : STEP 2, sinon on risque de passer à côté![]()
for i%=position% to maximun%-2 step 2
move.l #"SNDH",d0 Boucle: cmp.l (a0),d0 (On pourrait faire le bricolage a coup de mot j'ai je crois que ca risque d'ètre encore plus lent !) beq.s Found addq.w #2,a0 cmpa.l a1,a0 blt.s Boucle jsr Pas_trouver Found : traitement...
cmpa.l a1,a0 blt.s Boucle