De puis plusieurs semaines, quand j'en ai le temps, je refais une Lib de listes chaînées : Lib Vector
Toutes les fonctions disponibles sont listées ici :
Code : Tout sélectionner
; -------------------------------
; | Lib Vector (version 2 beta) |
; -------------------------------
;- Liste des fonctions disponibles
Vector_Count(*vector.Vector)
Vector_Index(*vector.Vector)
Vector_GetCurrentElement(*vector.Vector)
Vector_GetFirstElement(*vector.Vector)
Vector_GetLastElement(*vector.Vector)
Vector_SetCaseSensitiveState(*Vector.Vector, State.l) ; For String Vectors
Vector_FirstElement(*vector.Vector)
Vector_LastElement(*vector.Vector)
Vector_NextElement(*vector.Vector)
Vector_PreviousElement(*vector.Vector)
Vector_Reset(*vector.Vector)
Vector_SelectElement(*vector.Vector, Index.l)
Vector_Get(*vector.Vector, Index.l = #Vector_CurrentElement)
Vector_Set(*vector.Vector, *Object = #Null, Index.l = #Vector_CurrentElement)
Vector_SwapElements(*vector.Vector, Index1.l, Index2.l)
Vector_SetComparator(*vector.Vector, Function)
Vector_GetComparator(*vector.Vector)
Vector_CreateFromStructure(Constructor, Destructor, Comparator = #Null)
Vector_Create(Type.w)
Vector_Clear(*vector.Vector)
Vector_Free(*vector.Vector)
Vector_AddElement(*vector.Vector, *object = #Null, Index.l = #Vector_CurrentElement)
Vector_DeleteElement(*vector.Vector, Index.l = #Vector_CurrentElement)
Vector_SortOnRange(*vector.Vector, options.l, debut.l, fin.l)
Vector_Sort(*vector.Vector, options.l = #Null)
Vector_Search(*vector.Vector, *element, *index.Long = #Null)
Vector_Copy(*original.Vector)
Vector_Combine(*source.Vector, *destination.Vector)
Lorsque l'on crée un Vector, il faut lui spécifier un constructeur et un destructeur (les types de PB par défaut sont déjà gérés, il suffit d'utiliser les constantes #String, #Long...)
Ces constructeurs doivent renvoyer un pointeurs sur une structure. Les destructeurs faire tous les FreeMemory nécessaires (dont celui sur la structure elle-même) -- (mais pour le ptr sur la structure ça sera peut-être changé).
Ensuite, lors de l'ajout d'un élément, il ne suffira plus que de passer un pointeur sur l'objet et le constructeur déclaré se chargera donc de faire tous les AllocateMemory et les recopies de données nécessaires.
De nombreuses fonctions existent déjà : Ajout, Sort, Recherche, Copie, Swap d'élément, Combinaison (ajout du contenu d'un Vector à un autre).
Beaucoup d'autres arriveront plus tard, notamment sur les chaînes de caractères...
Pour l'instant, il n'y a pas encore de Doc, mais quelques exemples suffisent à vous montrer le fonctionnement général.
Pour plus d'informations, vous pouvez toujours aller voir à quoi ressembler la version 1 : Lib Vector 1
Complément : les listes internes de PB sont largement plus rapides (5 à 7 fois), mais les Vector permettent de programmer plus rapidement, sans avoir à récrire sans arrêt des fonctions de base.
N'hésitez pas à laisser vos commentaires, impressions ou rapports de Bug.
Lionel
