Code : Tout sélectionner
;-********************
;-Auteur : Heis Spiter
;-Date : 23/12/2004
;-ID : 172312040301
;-Version de PB : 3.92
; Forum Français : http://purebasic.hmt-forum.com/viewtopic.php?t=2089
;
; Cet exemple montre comment les class fonctionnent.
; Il est basé sur un code GreB, mais est plus facile ;)
;-********************
; Interface avec les fonctions
Interface Count
SetCounter(Number.l)
UpCrease()
DownCrease()
CounterReturn()
FreeCounter()
EndInterface
; Structure avec l'énumération des fonctions.
Structure Count_Functions
SetCounter.l
UpCrease.l
DownCrease.l
NumberReturn.l
FreeCounter.l
EndStructure
; Structure avec les variables qui vont être partagées.
Structure Count_Vars
*VirtualTable.Count_Functions
Number.l
EndStructure
; Première fonction, pour défnir le compteur.
Procedure SetCounter(*this.Count_Vars, Number.l)
*this\Number = Number
EndProcedure
; Seconde fonction pour rajouter un au nombre donné au compteur.
Procedure UpCrease(*this.Count_Vars)
*this\Number = *this\Number+1
EndProcedure
; Troisième fonction pour enlever un au nombre donné au compteur.
Procedure DownCrease(*this.Count_Vars)
*this\Number = *this\Number-1
EndProcedure
; Fonction pour retourner le nombre.
Procedure CounterReturn(*this.Count_Vars)
ProcedureReturn *this\Number
EndProcedure
; Structure utilisée comme passerelle...
Structure Count_Holder
VT.Count_Functions
Impl.Count_Vars
EndStructure
; ...Et liste chaînée
NewList Instances.Count_Holder()
; Fonction pour libérer le compteur (destruct)
Procedure FreeCounter(*this.Count_Vars)
*this\Number = 0
DeleteElement(Instances())
EndProcedure
; Fonction pour créer une instance du compteur (construct)
Procedure.l InitCounter()
AddElement(Instances())
Instances()\VT\SetCounter = @SetCounter()
Instances()\VT\UpCrease = @UpCrease()
Instances()\VT\DownCrease = @DownCrease()
Instances()\VT\NumberReturn = @CounterReturn()
Instances()\VT\FreeCounter = @FreeCounter()
Instances()\Impl\VirtualTable = Instances()\VT
Instances()\Impl\Number = 0
ProcedureReturn @Instances()\Impl
EndProcedure
; Exemples pour tester ;).
Counter.Count = InitCounter()
Counter2.Count = InitCounter()
Counter\SetCounter(5)
Counter2\SetCounter(5)
Counter\UpCrease()
Counter\UpCrease()
Counter2\DownCrease()
Counter2\DownCrease()
Counter\DownCrease()
Counter2\UpCrease()
Debug Counter\CounterReturn()
Debug Counter2\CounterReturn()
Counter\FreeCounter()
Debug Counter\CounterReturn()
Debug Counter2\CounterReturn()
Counter2\FreeCounter()
Debug Counter\CounterReturn()
Debug Counter2\CounterReturn()
