Page 1 sur 4

Lib Vector

Publié : mar. 27/sept./2005 9:35
par lionel_om
Bonjour à tous.
Comme je l'avais dis dans un autre post, je suis en train de bosser sur une lib Vector.
Ce nom est issu de la Lib STD du C++ qui fait intervenir le principe de conteneur et d'itérator. Je n'ai pas la prétention de dire que ma lib est aussi générique, toutefois mes vecteurs sont des listes doublement chainée génériques. Les vecteurs peuvent donc contenir 3 types d'objets (qui représente l'ensemble des solutions possibles en prog) :
* des entiers
* des chaines de caractères (strings)
* des structures

Toutes les fonctions nécessaires sont présentes : déplacement, ajout, suppression de cellules, swap entre deux cellules, etc.

D'autres fonctions sont également disponibles pour le tri et la recherche d'éléments. Par exemple, cette Lib arrive à trier un vecteur de 10000 éléments en moins de 40ms (merci le QuickSort ... :D )

Ainsi vous pouvez facilement créer des listes chainées sans être confronté au problème de la globalité.

Voici le lien : Lib Vector

Ce zip comporte la lib compilée avec TailBite, le ficheir d'aide (CHM), dans exemples pour les 3 types de données et les sources.

Je rajouterais aussi des fonctions pour ajouter une liste à une autre, une renvoyant la collision entre deux listes, etc.

Mais ça plus tard.

Merci d'avance pour la tester et me faire part de vos remarques.

Lio

Publié : mar. 27/sept./2005 21:54
par KarLKoX
Ce que j'aime bien en C++, c'est bien la STL et à fortiori, les vectors qui offrent une souplesse que l'on doit implémenter à la mano en C.
Donc merci pour ce support #yes

Re: Lib Vector

Publié : mer. 28/sept./2005 9:30
par Dr. Dri
lionel_om a écrit : mes vecteurs sont des listes doublement chainée
tu veux dire par là bidirectionnelles ?
sinon bon bouleau! je sais ce que ca représente :lol:
et bien joué pour les tris ^^

Dri

Re: Lib Vector

Publié : mer. 28/sept./2005 12:52
par lionel_om
Dr. Dri a écrit :
lionel_om a écrit : mes vecteurs sont des listes doublement chainée
tu veux dire par là bidirectionnelles ?
Oui, bi-directionnelles (à l'IUT on appelé ça doublement_chaînée :wink: )

Donc merci pour ce support :yes:

sinon bon bouleau! je sais ce que ca représente :lol:
et bien joué pour les tris ^^
Merci :D

Publié : mar. 11/oct./2005 8:31
par lionel_om
Vous n'avez pas de remarques sur ma LIB ? :cry:

QQ1 qui a Linux ou Mac pourrait la tester ??

Publié : mar. 11/oct./2005 9:40
par Chris
lionel_om a écrit :Vous n'avez pas de remarques sur ma LIB ? :cry:
Pas de nouvelles. Bonnes nouvelles. :lol:

Publié : mar. 11/oct./2005 9:51
par Backup
Vous n'avez pas de remarques sur ma LIB ?
mon pauvre ! , je sais meme pas a quoi sa sert ton truc ! :lol: :lol:

vector ? c'est pas le nom d'une Moto ça ? :lol:

Publié : mar. 11/oct./2005 11:59
par lionel_om
Dobro a écrit :vector ? c'est pas le nom d'une Moto ça ? :lol:
J'sais pas
Dobro a écrit :je sais meme pas a quoi sa sert ton truc !
Faut lire le premier post, un peu long, mais c'est rapide.
Chris a écrit :Pas de nouvelles. Bonnes nouvelles. :lol:
Bah oué, ms je sais pas si ya des gens qui comptent s'en servirent. Car je vais sans doute rajouter qq fonctions, mais si personne ne s'en sert (ou que ca n'intéresse personne) ça sert à rien que je reposte.

Publié : mar. 11/oct./2005 12:02
par Chris
Faut la finir quand même.

C'est le genre de lib dont il faut vraiment avoir l'utilité pour s'en servir, mais si elle existe, elle servira certainement. Ca, c'est sur.

Publié : mar. 11/oct./2005 12:54
par fweil
lionel_om,

Ces temps-ci je n'ai pas trop le temps, mais j'ai vu ce que tu fais et ça m'intéresse.

Juste pour t'encourager à continuer.

Je ne peux pas prédire de l'utilisation plus tard, mais le sujet m'intéresse et je trouverai certainement le temps de faire au moins des jeux d'essai avec.

Publié : mar. 11/oct./2005 13:54
par Flype
ca a l'air pas mal lionel, par contre si je peux me permettre :

1/ Les fonctions Debug n'existe pas !!

Vector_Debug(myVector)
Vector_DebugFromCur(myVector)

PureBasic dit que <Vector_Debug(myVector) is not a function, an array, or a linked list>

D'autant que attention car avec TailBite les noms de fonctions avec le suffixe _DEBUG() sont réservés aux checks en mode debugger. Alors est-ce à cause de çà que tes fonctions debug ont disparues :?:

2/ Pourrais tu fusionner certaines fonctions, par ex:

Vector_GetValue(*list.Vector)
Vector_GetValueAt(*list.Vector, index.l)

Vector_QuickSort(*list.Vector, option.l)
Vector_QuickSortIndex(*list.Vector, iMin.l, iMax.l, option.l)

Avec TailBite les fonctions seront fusionnées si tu écris :

ProcedureDLL.l Vector_GetValue(*list.Vector)
ProcedureDLL.l Vector_GetValue2(*list.Vector, index.l)

ProcedureDLL.l Vector_BasicSort(*list.Vector)
ProcedureDLL.l Vector_BasicSort2(*list.Vector, option.l)

ProcedureDLL.l Vector_QuickSort(*list.Vector)
ProcedureDLL.l Vector_QuickSort2(*list.Vector, option.l)
ProcedureDLL.l Vector_QuickSort3(*list.Vector, option.l, iMin.l, iMax.l)

comme çà certains arguments deviennent facultatifs :wink:

en tout cas gros travail - bravo
la doc aussi - mais soigne là encore un peu parcequ'il y a plein de ch'tites erreurs :

Vector_GetValueAt(...) est écrit Vector_GetValue
Vector_QuickSortIndex(...) devrait être retour.l = Vector_QuickSortIndex(...)

Publié : mar. 11/oct./2005 15:39
par lionel_om
Merci pour ces remarques positives.

@Flype. Oki je vais fusionner les fonctions.
Par contre pour les fonctions *_Debug, comme il est précisé dans un chapitre de la doc, leurs sources sont notées. Donc faut les incorporées par Copier / coller. Je suis pas ce que fait TailBite quand il trouve un "Debug" : s'il ignore la ligne ou la compile qd même. Je vais faire des tests.
ET par contre j'ai rien compris à propos des fcts *_Debug de TailBite. Donc si qq1 peut m'aider !!! :cry:

Merci en tout cas de vos remarques, ça fais bien plaisir !!! :D

Publié : mar. 11/oct./2005 16:28
par Flype
pour Tailbite et ses fonctions debug, regarde un petit example qui te concerne directement :

Code : Tout sélectionner

#VECTOR_ERROR_NULL  = "Specified address is null !"
#VECTOR_ERROR_INDEX = "index1 and index2 are equal !"

ProcedureDLL.l Vector_GetValue(*list.Vector)
  
  ; ta routine
  
EndProcedure

ProcedureDLL.l Vector_Swap(*list.Vector, index1.l, index2.l)
  
  ; ta routine
  
EndProcedure

ProcedureCDLL.l Vector_GetValue_DEBUG(*list.Vector)
  
  If *list = #Null
    TB_DebugError(#VECTOR_ERROR_NULL)
  EndIf
  
EndProcedure

ProcedureCDLL.l Vector_Swap_DEBUG(*list.Vector, index1.l, index2.l)
  
  If *list = #Null
    TB_DebugError(#VECTOR_ERROR_NULL)
  EndIf
  
  If index1 = index2
    TB_DebugError(#VECTOR_ERROR_INDEX)
  EndIf
  
EndProcedure
Lorsque tu créé une procédure MaFonction_DEBUG() Purebasic va pouvoir l'intégrer dans sa checklist lorsque le debugger est activé. Comme quand par ex tu fais PeekS(0) et que le debugger est allumé, alors Purebasic va crier "Specified address is null !".

Quoique long à définir (bcp de code en plus) tout çà s'avère très utile pour l'utilisateur final de la UserLib. Ah et attention, il faut ProcedureCDLL pour les fonctions debug.

voilà j'espere que ca t'aidera.

Publié : mar. 11/oct./2005 22:11
par gansta93
Et avec les procédures avec des paramètres facultatifs, il faut faire une procedure de debug par procédure... je ne c pas si je fus compréhensible...
[edit]Voilà un exemple très très simple.

Code : Tout sélectionner

ProcedureDLL OpenMailClient(Address$) ; Open the default E-Mail client according address and others specified data.
  
  ProcedureReturn RunProgram("mailto:" + Address$)
  
EndProcedure

ProcedureCDLL OpenMailClient_DEBUG(Address$) ; Open the default E-Mail client according address and others specified data.
  
  If FindString(Address$, "@", 1) = 1 Or FindString(Address$, "@", 1) = 0 Or FindString(Address$, "@", 1) = Len(Address$) Or CountString(Address$, "@") = 0 Or CountString(Address$, "@") > 1 Or FindString(Address$, ".", FindString(address$, "@", 1)) = 1 Or FindString(Address$, ".", FindString(address$, "@", 1)) = 0
    TB_DebugError("The address " + address$ + " is not valid.")
  EndIf
  
EndProcedure

ProcedureDLL OpenMailClient2(Address$, Subject$) ; Open the default E-Mail client according address and others specified data.
  
  ProcedureReturn RunProgram("mailto:" + adresse$ + "?subject=" + Subject$, "", "")
  
EndProcedure

ProcedureCDLL OpenMailClient2_DEBUG(Address$, Subject$) ; Open the default E-Mail client according address and others specified data.
  
  If FindString(Address$, "@", 1) = 1 Or FindString(Address$, "@", 1) = 0 Or FindString(Address$, "@", 1) = Len(Address$) Or CountString(Address$, "@") = 0 Or CountString(Address$, "@") > 1 Or FindString(Address$, ".", FindString(address$, "@", 1)) = 1 Or FindString(Address$, ".", FindString(address$, "@", 1)) = 0
    TB_DebugError("The address " + address$ + " is not valid.")
  EndIf
  
EndProcedure

ProcedureDLL OpenMailClient3(Address$, Subject$, Flags) ; Open the default E-Mail client according address and others specified data.
  
  ProcedureReturn RunProgram("mailto:" + adresse$ + "?subject=" + sujet$, "", "", Flag)
  
EndProcedure

ProcedureCDLL OpenMailClient3_DEBUG(Address$, Subject$, Flags) ; Open the default E-Mail client according address and others specified data.
  
  If FindString(Address$, "@", 1) = 1 Or FindString(Address$, "@", 1) = 0 Or FindString(Address$, "@", 1) = Len(Address$) Or CountString(Address$, "@") = 0 Or CountString(Address$, "@") > 1 Or FindString(Address$, ".", FindString(address$, "@", 1)) = 1 Or FindString(Address$, ".", FindString(address$, "@", 1)) = 0
    TB_DebugError("The address " + address$ + " is not valid.")
  EndIf
  
EndProcedure

Publié : mer. 12/oct./2005 9:11
par lionel_om
Daccord merci bien pour ces infos.

J'ai découvert un bug dans ma Lib (fonction Vector_Search()), donc je le corrigerai.
Par contre, je me susi aperçu que lors de mon formatage, j'ai perdu les sources de la doc. Donc je vais devoir tout me retapper (pour également corrigés certains problèmes : fct GetMin(), GetMax())

Plus d'infos plutard. :wink: