Je n'aime pas avoir trop de procedures dans mes programmes, mais je veux qu'elles soient complètes et que incorporent un maxi de code, malgé les pertes de vitesse.
Alors j'ai un petit probleme en partager une LinkedList situé dans une procedure
Le mot clef Shared ne fontionne pas correctement dans le code N.2
Code N.1 (le programme fonctionne bien avec Global)
Code N.2 (Shared provoque une erreur)Structure Animal
Nom.s
Vitesse.l
EndStructure
Global NewList Animaux.Animal()
Procedure ColAnimal(Nom.s,Vitesse,Flags.b=0, INFOFlags_GetElementByNom1_SortByNom2_SortByVitesse3_ClearCollection99.b=0)
If flags=99: ClearList(Animaux()):EndIf;éffacer la collection
If flags=1; trouver un animal
;*Ancien_Element = @MaListe() ; On mémorise l'adresse de l'élément courant
ResetList(Animaux()) ; Effectue une recherche de tous les éléments nommés
While NextElement(Animaux()) And (Animaux()\Nom <> Nom):Wend
;ChangeCurrentElement(MaListe(), *Ancien_Element) ; Restitue l'ancien élément courant (mémorisé avant la recherche)
Else
If Len(nom)
AddElement(Animaux())
Animaux()\Nom = nom
Animaux()\Vitesse = Vitesse
EndIf
EndIf
If flags=2
SortStructuredList(Animaux(), #PB_Sort_Ascending, OffsetOf(Animal\Nom), #PB_Sort_String)
ElseIf flags=3
SortStructuredList(Animaux(), #PB_Sort_Ascending, OffsetOf(Animal\Vitesse), #PB_Sort_Long)
EndIf
EndProcedure
;Ajouter les animaux et respectives vitesses dans la collection
ColAnimal ("tigre",59)
ColAnimal ("lion",49)
ColAnimal ("chat",539)
ColAnimal ("lievre",549)
ColAnimal ("girafe",259)
ColAnimal ("souris",5)
ColAnimal ("vache",39)
ColAnimal ("lapin",59,3); ajoute le lapin et fait un trie des vitesses
ForEach Animaux():Debug Animaux()\Nom+" - Vitesse : "+Str(Animaux()\Vitesse):Next
ColAnimal ("girafe",0,1); rechercher la vitesse de la girafe
Debug Animaux()\Vitesse
Merci de vos réponsesProcedure ColAnimal(Nom.s,Vitesse,Flags.b=0, INFOFlags_GetElementByNom1_SortByNom2_SortByVitesse3_ClearCollection99.b=0)
Static Init.b
If Init=0
Init=1
Structure Animal
Nom.s
Vitesse.l
EndStructure
Shared NewList Animaux.Animal() ;?========================================ERROR
End If
If flags=99: ClearList(Animaux()):EndIf;éffacer la collection
If flags=1; trouver un animal
;*Ancien_Element = @MaListe() ; On mémorise l'adresse de l'élément courant
ResetList(Animaux()) ; Effectue une recherche de tous les éléments nommés
While NextElement(Animaux()) And (Animaux()\Nom <> Nom):Wend
;ChangeCurrentElement(MaListe(), *Ancien_Element) ; Restitue l'ancien élément courant (mémorisé avant la recherche)
Else
If Len(nom)
AddElement(Animaux())
Animaux()\Nom = nom
Animaux()\Vitesse = Vitesse
EndIf
EndIf
If flags=2
SortStructuredList(Animaux(), #PB_Sort_Ascending, OffsetOf(Animal\Nom), #PB_Sort_String)
ElseIf flags=3
SortStructuredList(Animaux(), #PB_Sort_Ascending, OffsetOf(Animal\Vitesse), #PB_Sort_Long)
EndIf
EndProcedure
;Ajouter les animaux et respectives vitesses dans la collection
ColAnimal ("tigre",59)
ColAnimal ("lion",49)
ColAnimal ("chat",539)
ColAnimal ("lievre",549)
ColAnimal ("girafe",259)
ColAnimal ("souris",5)
ColAnimal ("vache",39)
ColAnimal ("lapin",59,3); ajoute le lapin et fait un trie des vitesses
ForEach Animaux():Debug Animaux()\Nom+" - Vitesse : "+Str(Animaux()\Vitesse):Next
ColAnimal ("girafe",0,1); rechercher la vitesse de la girafe
Debug Animaux()\Vitesse