Page 1 sur 1

Liste chainées : SwapElements()

Publié : lun. 24/oct./2005 16:16
par Chris
Je ne sais pas si c'est un bug, mais SwapElement() fonctionne bizarrement quand une liste chainée n'est pas combinée à une structure.

Un petit code valant mieux qu'un long discours, passez celui-ci au débugger en modifiant la valeur de la constante #Test
(#Test = 1 : La liste chainée est combinée à une structure, #Test = 0, Liste chainée "normale").

Vous remarquerez, au passage, que les codes des deux procédure sont absolument identique, à part pour le nom des listes

Code : Tout sélectionner

Structure TEST
  Liste.s
EndStructure

NewList MaListe1.s()
NewList MaListe2.TEST()


Procedure TestMyList_1()
  
  For i = 65 To 90
    AddElement(MaListe1())
    MaListe1() = Chr(i)
  Next
  
  
  For i = 0 To 50
    C1 = Random(20)
    C2 = Random(20)
    
    If C1 <> C2
      SelectElement(MaListe1(), C1)
      *Pointer1 = @MaListe1()
      
      SelectElement(MaListe1(), C2)
      *Pointer2 = @MaListe1()
      
      SwapElements(MaListe1(), *Pointer1, *Pointer2)
    EndIf
  Next
EndProcedure

Procedure TestMyList_2()
  
  For i = 65 To 90
    AddElement(MaListe2())
    MaListe2()\Liste = Chr(i)
  Next
  
  
  For i = 0 To 50
    C1 = Random(20)
    C2 = Random(20)
    
    If C1 <> C2
      SelectElement(MaListe2(), C1)
      *Pointer1 = @MaListe2()
      
      SelectElement(MaListe2(), C2)
      *Pointer2 = @MaListe2()
      
      SwapElements(MaListe2(), *Pointer1, *Pointer2)
    EndIf
  Next
EndProcedure

;- Modifier la valeur de la constante pour les tests
#Test = 1
;-

If #Test = 0
  TestMyList_1()
  
  ForEach MaListe1()
    Debug MaListe1()
  Next
ElseIf #Test = 1
  TestMyList_2()
  
  ForEach MaListe2()
    Debug MaListe2()\Liste
  Next
EndIf

Publié : mar. 25/oct./2005 11:00
par Fred
En effet, pour une liste de type string, le pointeur du string est renvoyé au lieu du pointeur de l'élément de la liste. Pour tous les autres cas (.l etc.) ca fonctionne correctement. Je vais changer ca, mais j'avoue que ca pose un probleme pas evident.

Publié : mar. 25/oct./2005 11:06
par Chris
Personnellement, maintenant que je le sais, ça ne me gène pas de passer par une structure pour les types .s, mais c'est vrai que si tous les types étaient pareils, ce serait plus pratique.

Cela dit, pour moi, il n'y a rien qui presse :wink: