OOP easy with Macro New and Delete

Share your advanced PureBasic knowledge/code with the community.
Nico
Enthusiast
Enthusiast
Posts: 274
Joined: Sun Jan 11, 2004 11:34 am
Location: France

Post by Nico »

New Macro

Code: Select all

;-----------------------Fichier New_Delete.pb --------------------

Macro Class(Debut)
  Interface Debut
EndMacro

Macro Membre(Fin)
  EndInterface
  Structure Fin#_
  Vtable.l 
EndMacro

Macro EndClass()
  EndStructure
EndMacro


Macro New(Pointer,Class)
  Pointer#_.Class#_=AllocateMemory(SizeOf(Class#_))
  Pointer#_\Vtable=?Class
  Pointer#.Class=@Pointer#_\Vtable
  Class(Pointer)
EndMacro

Macro Delete(Pointer,Class)
  If Pointer
    Pointer#_.Class#_=Pointer
    Class#_(Pointer)
    FreeMemory(Pointer)
  EndIf 
EndMacro

Macro Method(Class,Function)
    Procedure.l Function#(*This.Class#_
EndMacro 


Macro Constructor(Class)
    Procedure.l Class#(*This.Class#_)
EndMacro 


Macro Destructor(Class)
    Procedure.l Class#_(*This.Class#_)
EndMacro 

Macro Close()
  EndProcedure
EndMacro 
;-----------------------------------------------------------------

Test:

Code: Select all

IncludeFile "New_Delete.pb" 

Interface Soustraction
  Soustraction()
EndInterface 


Class(Calcul Extends Soustraction)
  SetData(a.l,b.l)
  Addition()
  Multiplication()
  
  Membre(Calcul)
  a.l
  b.l
EndClass() 


Constructor(Calcul)
  Debug "--------------------------"
  Debug "Constructor"
  *This\a=0
  *This\b=0
  Debug "--------------------------"
Close()


Destructor(Calcul)
  Debug "--------------------------"
  Debug "Destructor"
  Debug "--------------------------"
Close()


Method(Calcul,Soustraction))
  ProcedureReturn *This\a - *This\b
Close()

Method(Calcul,Setdata),a.l,b.l)
  *This\a=a
  *This\b=b
Close()

Method(Calcul,Addition))
    ProcedureReturn *This\a + *This\b
Close()

Method(Calcul,Multiplication))
    ProcedureReturn *This\a * *This\b
Close()

New(*Pointeur,Calcul)

;Modification des valeurs en passant par une fonction
;/*Pointeur\Setdata(5,3)

; Modification directe des valeurs
*pointeur2.calcul_=*pointeur
*pointeur2\a=5
*pointeur2\b=3


Debug "Addition= "+Str(*Pointeur\ Addition())
Debug "Multiplication= "+Str(*Pointeur\ Multiplication())
Debug "Multiplication= "+Str(*Pointeur\ Soustraction())

Delete(*Pointeur,Calcul)

DataSection
Calcul:
Data.l @Soustraction(),@SetData(),@Addition(),@Multiplication()
EndDataSection
Post Reply