How to resolve the algorithm Singleton step by step in the BASIC programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Singleton step by step in the BASIC programming language

Table of Contents

Problem Statement

A Global Singleton is a class of which only one instance exists within a program. Any attempt to use non-static members of the class involves performing operations on this one instance.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Singleton step by step in the BASIC programming language

Source code in the basic programming language

REM Sacado del forum de FreeBASIC (https://www.freebasic.net/forum/viewtopic.php?t=20432)

Type singleton
    Public :
    Declare Static Function crearInstancia() As singleton Ptr
    Declare Destructor ()
    Dim i As Integer
    Private :
    Declare Constructor()
    Declare Constructor(Byref rhs As singleton)
    Declare Static Function instancia(Byval crear As Integer) As singleton Ptr
End Type

Static Function singleton.crearInstancia() As singleton Ptr
    Return singleton.instancia(1)
End Function

Static Function singleton.instancia(Byval crear As Integer) As singleton Ptr
    Static ref As singleton Ptr = 0
    Function = 0
    If crear = 0 Then
        ref = 0
    Elseif ref = 0 Then
        ref = New singleton
        Function = ref
    End If
End Function

Constructor singleton ()
End Constructor

Destructor singleton()
singleton.instancia(0)
End Destructor

'-----------------------------------------------------------------------------
Dim As singleton Ptr ps1 = singleton.crearinstancia()
ps1->i = 1234
Print ps1, ps1->i

Dim As singleton Ptr ps2 = singleton.crearinstancia()
Print ps2

Delete ps1

Dim As singleton Ptr ps3 = singleton.crearinstancia()
Print ps3, ps3->i
Delete ps3
Sleep

Class Singleton
  static sys inst 'private
  int instantiated() { return inst }
  void constructor(){ if not inst then inst=@this }
  
  'all other methods start with @this=inst
end class

'if not singleton.instantiated
  new Singleton MySingleton
'endif

Global SingletonSemaphore=CreateSemaphore(1)

Interface OO_Interface    ; Interface for any value of this type 
  Get.i()        
  Set(Value.i) 
  Destroy()
EndInterface 

Structure OO_Structure ; The *VTable structure  
  Get.i
  Set.i
  Destroy.i
EndStructure 

Structure OO_Var  
  *VirtualTable.OO_Structure
  Value.i 
EndStructure 

Procedure OO_Get(*Self.OO_Var)
  ProcedureReturn *Self\Value
EndProcedure

Procedure OO_Set(*Self.OO_Var, n)
  *Self\Value = n
EndProcedure

Procedure CreateSingleton()
  If TrySemaphore(SingletonSemaphore)
    *p.OO_Var = AllocateMemory(SizeOf(OO_Var))
    If *p
      *p\VirtualTable = ?VTable
    EndIf
  EndIf
  ProcedureReturn *p
EndProcedure

Procedure OO_Destroy(*Self.OO_Var)
  FreeMemory(*Self)
  SignalSemaphore(SingletonSemaphore)
EndProcedure

DataSection
  VTable:
  Data.i @OO_Get()
  Data.i @OO_Set()
  Data.i @OO_Destroy()
EndDataSection

Singleton Class Demo
  BeginPrivate
    Name$
    X.i
  EndPrivate
  
  Public Method Init(Name$)
    This\Name$ = Name$
  EndMethod
  
  Public Method GetX()
    MethodReturn This\X
  EndMethod
  
  Public Method SetX(n)
    This\X = n
  EndMethod
  
  Public Method Hello()
    MessageRequester("Hello!", "I'm "+This\Name$)
  EndMethod
  
EndClass

  

You may also check:How to resolve the algorithm Determine if two triangles overlap step by step in the Ada programming language
You may also check:How to resolve the algorithm Box the compass step by step in the Gambas programming language
You may also check:How to resolve the algorithm Paraffins step by step in the Kotlin programming language
You may also check:How to resolve the algorithm Harshad or Niven series step by step in the K programming language
You may also check:How to resolve the algorithm Ranking methods step by step in the D programming language