La mémoire
Publié : ven. 15/avr./2011 12:57
Bonjour, tous est préciser dans le code
Cependant ya de gros bug et je n'arrive pas a comprendre pourquoi sa ne marche pas !
Est-ce qu’il serait possible de tester et me dire ce qui cloche svp
Est-ce que se serais possible d'améliorer ceci, comment procèderiez-vous ?

Cependant ya de gros bug et je n'arrive pas a comprendre pourquoi sa ne marche pas !
Est-ce qu’il serait possible de tester et me dire ce qui cloche svp

Est-ce que se serais possible d'améliorer ceci, comment procèderiez-vous ?
Code : Tout sélectionner
; Les oppération sur les variables sont bien trop longue a force de les remplire
; le but est de crée une procedure qui va permètre de faire la même chose
; mais avec une vitesse nètement plus avencer
; Exemple:
; For Variable = 1 To 1000000
; MaVariable$ + "Abcdefghijklmnopqrstuvwxyz"
; Next
; Ceci va prendre des heurs et des heurs !
; alors que:
; MaVariable("MaVariable$", "+", "Abcdefghijklmnopqrstuvwxyz")
; Va prendre que quelques dizaine de secondes seullement !
; Voici le but de ce programme !
Global NewList GestionnaireDeVariable.s() ; Cette liste va servire pour stoker les imformations sur les variables
; Ajout d'un emplacement vide au début de la liste pour entrée dans la boucle ForEach
; si jamais aucune variable n'est présente dans la liste
AddElement(GestionnaireDeVariable())
GestionnaireDeVariable() = ""
; la procedure permetant de faire des oppérations avec les variables
Procedure.l MaVariable(NomVariable$, Opperateur$, Valeur$)
Debug "---------------------------"
; Je vais faire une recherche pour voir si la variable éxiste déjà ou pas
NombreElementListe = ListSize(GestionnaireDeVariable()) ; Je regarde combien d'élément il y à dans la liste actuellement
ForEach GestionnaireDeVariable() ; Je fait une recherche en passent en revue tous les éléments de la liste
PositionDansLaListe + 1 ; Je sauvegarde l'emplacement ou nous somme actuellement dans la liste
; Pour commencer, j'extrait le nom de la variable
NomDeLaVariable$ = StringField(GestionnaireDeVariable(), 1, "»")
LongueurValeurVariable = Len(Valeur$) ; je regarde combien d'octets fait la valeur de la variable
; Si la variable a été trouvé c'est qu'elle éxiste, donc on va pas la recrée
If NomDeLaVariable$ = NomVariable$
; j'extrait ensuite la valeur de la variable
ValeurVariable$ = StringField(GestionnaireDeVariable(), 2, "»")
LongueurValeurVariableEnregistrer = Len(ValeurVariable$) ; je regarde combien d'octets fait la valeur de la variable dans la liste
; puis j'extrait l'emplacement ou se situe la variable dans la mémoire (sont adresse mémoire)
*EmplacementMemoire = Val(StringField(GestionnaireDeVariable(), 3, "»"))
Debug "A trouvé la variable:"
Debug "Nom de la variable = " + NomDeLaVariable$
Debug "Valeur de la variable = " + ValeurVariable$
Debug "Emplacement Memoire de la variable = " + Str(*EmplacementMemoire)
; Je vérrifie l'oppérateur pour voir si il est correcte
If Opperateur$ = "="
; Si la taille de la variable dans la liste est plus grande que la nouvelle valeur
If LongueurValeurVariableEnregistrer > LongueurValeurVariable
; je suprime toutes les données de cette variable pour en recrée une de la bonne taille
Debug "---------------------------"
Debug "La taille de la variable dans la liste est plus grande que la nouvelle valeur"
FreeMemory(*EmplacementMemoire) ; je supprime la variable dans la mémoire
DeleteElement(GestionnaireDeVariable(), 1) ; je supprime égualement la variable dans la liste
Debug "Supprésion de la variable dans la mémoire"
Debug "Supprésion de la variable dans la liste"
; Pour conserver quoiqu'il arrive un élément courant valide après un DeleteElement()
; j'utilise la valeur 1 dans le paramètre 'Options'. Le nouvel élément est alors l'élément
; qui suivait l'élément supprimé.
; Si la liste ne contenait plus qu'un seul élément
; alors il n'y a plus d'élément courant.
PositionDansLaListe - 1 ; L'élement courent a changer donc j'enlève 1
; Je recrée le tous:
*EmplacementMemoire = AllocateMemory(LongueurValeurVariable + 1) ; j'aloue la mémoire néccéssaire suivent la taille de la valeur de la variable plus 1 octet de sécurité
LastElement(GestionnaireDeVariable()) ; je vais a la fin de la liste
AddElement(GestionnaireDeVariable())
GestionnaireDeVariable() = NomVariable$ + "»" + Valeur$ + "»" + Str(*EmplacementMemoire) ; j'insère la nouvelle variable dans ce format: Variable»Valeur»EmplacementMemoire
; Sinon si la taille de la variable dans la liste est plus petite que la nouvelle valeur
ElseIf LongueurValeurVariableEnregistrer < LongueurValeurVariable
Debug "---------------------------"
Debug "La taille de la nouvelle valeur est plus grande que la variable dans la liste"
; Je regarde la différence de taille qu'il y as entre les deux taille de valeur
DifferenceTaille = LongueurValeurVariable - LongueurValeurVariableEnregistrer ; La plus grande - la plus petite
Debug "La différence est de " + Str(DifferenceTaille) + " octets"
*EmplacementMemoire = ReAllocateMemory(*EmplacementMemoire, DifferenceTaille + 1) ; je réaloue de la mémoire a la suite de la précedente suivent la taille de la valeur de la variable plus 1 octet de sécurité
If *EmplacementMemoire > 0 ; Si l'emplacement a été correctement alouer
; je remplace la valeur de la valiable dans la liste
GestionnaireDeVariable() = NomVariable$ + "»" + Valeur$ + "»" + Str(*EmplacementMemoire) ; j'insère la nouvelle variable dans ce format: Variable»Valeur»EmplacementMemoire
Else ; Sinon si l'emplacement n'a pas été correctement alouer, ont affiche un message d'avertissement
Debug "Impossible d'allouer la mémoire demandée pour la variable !"
ProcedureReturn 0 ; Nous sorton imédiatement de la procedure avec la valeur 0 pour dire que l'oppération sur la variable a échouer
EndIf
; Sinon si les deux valeur sont identique
ElseIf LongueurValeurVariableEnregistrer = LongueurValeurVariable
; Rien ne change, ont ne fait rien puisque les deux valeur sont identique
EndIf
; Je remplace le comptenue de la variable
PokeS(*EmplacementMemoire, Valeur$, -1, #PB_Ascii) ; J'écrie dans la mémoire la valeur de la variable
Debug "---------------------------"
Debug "A remplacer la valeur de la variable:"
Debug "Nom de la variable = " + NomDeLaVariable$
Debug "Nouvelle valeur de la variable = " + Valeur$
Debug "Nouvelle emplacement Memoire de la variable = " + Str(*EmplacementMemoire)
ElseIf Opperateur$ = "+"
ElseIf Opperateur$ = "-"
ElseIf Opperateur$ = "*"
ElseIf Opperateur$ = "/"
Else
Debug "Oppérateur invalide !"
ProcedureReturn 0 ; Nous sorton imédiatement de la procedure avec la valeur 0 pour dire que l'oppération sur la variable a échouer
EndIf
Break ; ont quitte la boucle puisqu'ont a trouvé la variable
Else ; Sinon
If PositionDansLaListe = NombreElementListe ; si on est a la fin de la liste et si la variable n'a pas été trouvé, c'est qu'elle n'éxiste pas, donc on va la crée
LongueurValeurVariable = Len(Valeur$) ; je regarde combien d'octets fait la valeur de la variable
*EmplacementMemoire = AllocateMemory(LongueurValeurVariable + 1) ; j'aloue la mémoire néccéssaire suivent la taille de la valeur de la variable plus 1 octet de sécurité
If *EmplacementMemoire > 0 ; Si l'emplacement a été correctement alouer
Debug "N'a pas trouvé la variable:"
Debug "Nom de la variable = " + NomVariable$
Debug "---------------------------"
Debug "A enregistrer la variable:"
Debug "Nom de la variable = " + NomVariable$
Debug "Valeur de la variable = " + Valeur$
Debug "Longueur de la valeur de la variable = " + Str(LongueurValeurVariable) + " Octets"
Debug "Adresse d'alocation de l'emplacement de la Memoire de la variable = " + Str(*EmplacementMemoire)
Debug "---------------------------"
; Enregistrement de la variable, de sa valeur, et numéro d'emplacement
LastElement(GestionnaireDeVariable()) ; je vais a la fin de la liste
AddElement(GestionnaireDeVariable())
GestionnaireDeVariable() = NomVariable$ + "»" + Valeur$ + "»" + Str(*EmplacementMemoire) ; j'insère la nouvelle variable dans ce format: Variable»Valeur»EmplacementMemoire
PokeS(*EmplacementMemoire, Valeur$, -1, #PB_Ascii) ; J'écrie dans la mémoire la valeur de la variable
Debug "Résulta:"
Debug NomVariable$ + "»" + Valeur$ + "»" + Str(*EmplacementMemoire)
Else ; Sinon si l'emplacement n'a pas été correctement alouer, ont affiche un message d'avertissement
Debug "Impossible d'allouer la mémoire demandée pour la variable !"
ProcedureReturn 0 ; Nous sorton imédiatement de la procedure avec la valeur 0 pour dire que l'oppération sur la variable a échouer
EndIf
EndIf
EndIf
Next GestionnaireDeVariable()
; Comme tous c'est bien passer, nous sorton imédiatement de la procedure avec la valeur 1 pour dire que l'oppération sur la variable a été un succer
ProcedureReturn 1
EndProcedure
; Procedure AjoutDonnerMemoire(Donner$)
; CopyMemoryString(PeekS(*Pointeur) + Donner$ + Chr(13) + Chr(10), @*Pointeur)
; EndProcedure
;
; Global *PointeurVariableID
MaVariable("abc", "=", "2")
MaVariable("abcd", "=", "4")
MaVariable("abcde", "=", "6")
MaVariable("abc", "=", "4")
MaVariable("abcd", "=", "8")
MaVariable("abcde", "=", "2")
MaVariable("abc", "=", "445")
MaVariable("abcd", "=", "Abcdefghijklmnopqrstuvwxyz")
MaVariable("abcde", "=", "")
MaVariable("abc", "=", "Abcdefghijklmnop")
MaVariable("abcd", "=", "Abcdefghijklmnop124")
MaVariable("abcde", "=", "Abcdefghijklmnopqrstuvwxyz0123456789")
MaVariable("abc", "=", "1500")
MaVariable("abc", "=", "0123456789012345678901234567890123456789")
MaVariable("abc", "=", "Abcdefghijklmnopqrstuvwxyz")
MaVariable("abc", "=", "Abcdefghijklmnopqrstuvwxyz0123456789")
MaVariable("abcd", "=", "Abcdefghijklmnopqrstuvwxyz0123456789")
MaVariable("abcde", "=", "Abcdefghijklmnopqrstuvwxyz0123456789")
MaVariable("abc", "=", "2")
MaVariable("abc", "=", "Abcdefghijklmnopqrstuvwxyz")
MaVariable("abc", "=", "445")
MaVariable("abc", "=", "Abcdefghijklmnop")
MaVariable("abc", "=", "1500")
MaVariable("abc", "=", "Abcdefghijklmnopqrstuvwxyz0123456789")
ForEach GestionnaireDeVariable()
; j'extrait l'emplacement ou se situe la variable dans la mémoire (sont adresse mémoire)
*EmplacementMemoire = Val(StringField(GestionnaireDeVariable(), 3, "»"))
If *EmplacementMemoire <> 0
Liste$ + "Liste = " + GestionnaireDeVariable() + Chr(13) + "Mémoire = Adresse: " + Str(*EmplacementMemoire) + ", Valeur: " + PeekS(*EmplacementMemoire, -1, #PB_Ascii) + Chr(13)
Else
Liste$ + GestionnaireDeVariable() + Chr(13)
EndIf
Next GestionnaireDeVariable()
MessageRequester("Résulta", Liste$)