Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
kungfu-sheep Anomalie floodiforme
Inscrit le: 14 Avr 2011 Messages: 1846 Sujets: 119 Spécialité en worldedit: fonctions paramétriques, équation de mouvement.
|
Posté le: 28/01/13 21:32 Sujet du message: |
|
|
et comme je récup l'instance pour réindexer dans destroy ? _________________
22:27:43<Seiraw> Bah y a deux genre de personnes
22:27:57<Seiraw> les soumis et les soumises |
|
Revenir en haut |
|
|
Sapeur-Goblin Floodeur prématuré
Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
|
Posté le: 28/01/13 21:36 Sujet du message: |
|
|
Je ne comprends pas pourquoi tu dis qu'il ne sert à rien.
Si tu détruis les instances seulement dans la méthode appelée périodiquement, là oui, il ne sert à rien car tu as déjà une variable locale qui a la bonne valeur.
Mais pour faire ça proprement, il faudrait laisser à l'utilisateur la possibilité de détruire l'instance avec la méthode destroy().
Et sans cette variable, c'est pas possible. _________________
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 28/01/13 21:45 Sujet du message: |
|
|
L'utilisateur à accés à l'array hein. _________________
Le violet, c'est moche. |
|
Revenir en haut |
|
|
Sapeur-Goblin Floodeur prématuré
Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
|
Posté le: 28/01/13 21:47 Sujet du message: |
|
|
Hum?
L'array est private.
Par utilisateur j'entends le mec qui copie-colle la lib' dans sa map et l'utilise sans connaître son fonctionnement.
Et je ne vois pas ce que ça changerait. Il faudrait qu'il fasse une boucle pour récupérer l'index? _________________
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 28/01/13 21:55 Sujet du message: |
|
|
Cette library est juste un exemple, faut pas la "requires".
L'implémentation de la structure est assez simple pour être reproduite à chaque fois.
Donc oui l'utilisateur à accès à la variable array.
Le membre i de la struct est là pour dire d'être là, il n'a aucune utilité.
Je ne comprends vraiment pas votre délire avec ce membre :s _________________
Le violet, c'est moche. |
|
Revenir en haut |
|
|
Sapeur-Goblin Floodeur prématuré
Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
|
Posté le: 28/01/13 21:57 Sujet du message: |
|
|
J'ai vraiment du mal à te suivre. Peut-être qu'on ne parle pas de la même chose .
Comment tu fais la méthode destroy sans ce membre? _________________
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
|
Revenir en haut |
|
|
Sapeur-Goblin Floodeur prématuré
Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
|
Posté le: 28/01/13 22:02 Sujet du message: |
|
|
Citation: | La method create et destroy n'en n'a pas besoin pour gérer le tableau d'instances en cours, et de même pour loop sur le tableau. |
Mais quand tu détruis une instance, il faut bien la retirer du tableau, sinon tu "leaks" d'une instance. _________________
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 28/01/13 22:17 Sujet du message: |
|
|
Tu "leak" d'une instance seulement si tu ne la détruit pas quand tu n'en n'as plus besoin (.deallocate ou simplement .destroy si la method destroy est implicite).
Mais comme je l'ai dit c'est quand même plus propre de redéfinir le slot de l'array à 0.
Bref :
Jass: | library
globals
//quelques constant private
//une variable de type de la struct en private array
private Nom array Stack
//une variable integer en private qui index les instances initialisé à 0
private integer N = 0
//un timer private
private Timer T = CreateTimer()
endglobals
struct Nom
// les composants de la struct
method destroy takes nothing returns nothing
call this.deallocate() // l'instance est bien détruite, donc recyclée
set N = N - 1
if N == 0 then
call PauseTimer(T)
endif
set Stack[this] = Stack[N]
set Stack[N] = 0
endmethod
private static method nom2 takes nothing returns nothing
//celle qui exécutera les instances une à une
local integer i = N
loop
exitwhen i <= 0
set i = i - 1
//les actions à exécuter pour chaque instance : Stack[i]
// on peut détruire Stack[i] sans problème
call Stack[i].destroy()
endloop
endmethod
static method create takes /* ce que tu veux*/ returns thistype
local thistype this = thistype.allocate()
set Stack[N] = this
set N = N + 1
if N == 1 then
call TimerStart(T, 0.01, true, function thistype.nom2)
endif
return this
endmethod
endstruct
endlibrary |
Notez qu'il peut y avoir des erreurs j'ai choisi des noms de variables plus appropriés, et j'ai surtout pas testé le code, écrit directement ici. _________________
Le violet, c'est moche. |
|
Revenir en haut |
|
|
Sapeur-Goblin Floodeur prématuré
Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
|
Posté le: 28/01/13 22:22 Sujet du message: |
|
|
Jass: | set Stack[this] = Stack[N]
set Stack[N] = 0 |
Bah justement, c'est pour ce truc que le membre index est utile.
Parce que rien n'oblige this a être situé à l'index this du stack.
C'est vrai pour les premières instances, mais dès que tu fais ça :
Jass: | set Stack[this] = Stack |
Ce n'est plus le cas. _________________
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 28/01/13 22:28 Sujet du message: |
|
|
En fait c'est la structure que tu ne comprends pas.
_________________
Le violet, c'est moche. |
|
Revenir en haut |
|
|
Sapeur-Goblin Floodeur prématuré
Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
|
Posté le: 28/01/13 22:35 Sujet du message: |
|
|
TB just pwned Sapeur-Goblin!
Non, en fait, là, vraiment, je te suis plus.
En effet, j'aimerais bien l'avis de Tirlititi.
Je pense que j'ai bloqué sur un truc, mais en essayant ton algo, ça bloque.
Imaginons un cas simple.
Stack contient trois instances : thistype(1), 2, et 3.
Rangé en Stack[1] 2 et 3 pour faire simple (pas d'index 0).
Première fonction callback, tout se passe bien.
Ensuite, l'utilisateur fait thistype(2).destroy()
Ce qui donne, en suivant ton algo :
N = 2
Stack[1] = 1
Stack[2] = 3
Stack[3] = 0
Maintenant, on recrée une instance :
Stack[1] = 1
Stack[2] = 3
Stack[3] = 2
N = 3
On détruit la 3 :
N = 2
Et en suivant ton algo :
Stack[1] = 1
Stack[2] = 3
Stack[3] = 0
L'instance 2 a disparut du tableau alors qu'elle n'a pas été détruite.
Où j'ai buggé? _________________
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 28/01/13 22:40 Sujet du message: |
|
|
Citation: | Rangé en Stack[1] 2 et 3 pour faire simple (pas d'index 0). |
Je me suis arrêté là, pas d'approximation, tient toi au code. _________________
Le violet, c'est moche. |
|
Revenir en haut |
|
|
Sapeur-Goblin Floodeur prématuré
Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
|
Posté le: 28/01/13 22:48 Sujet du message: |
|
|
Première création :
Stack[0] = 1
N = 1
Deuxième :
Stack[1] = 2
N = 2
Troisième :
Stack[2] = 3
N = 3
On détruit la 2 :
N = 2
Stack[this] = Stack[N] Donc Stack[2] = 3
Stack[2] = 0
C'est encore pire en suivant ton truc à la lettre : l'instance 2 est toujours dans Stack[1].
Ouais, en fait il suffit de faire thistype.create().destroy() et l'instance 1 sera toujours dans Stack. _________________
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
|
Revenir en haut |
|
|
|