Code-Beispiel
Dynamische Arrays in Types
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
WTFPL | MOD | 10.11.2011 |
Dynamische Arrays sind in Types in der aktuellen FreeBASIC Version (0.23.0) nicht möglich. Wenn man aber auf die OOP-Fähigkeiten von FB zurückgreift, ist es sehr wohl möglich, wenn auch ungemein umständlicher.
Type testtyp
Public:
Declare Constructor
Declare Constructor(c As Integer)
Declare Destructor
Declare Property array(i As Integer) As Integer
Declare Property array(i As Integer, a As Integer)
Declare Function LBound() As Integer
Declare Function UBound() As Integer
Declare Function Pointr() As UInteger Ptr
Declare Sub ReDim(x As Integer)
Private:
As Integer size
As Integer Ptr arr
End Type
Constructor testtyp
End Constructor
Constructor testtyp(c As Integer)
If c >= 0 Then
arr = Callocate(c, SizeOf(Integer))
size = c + 1
EndIf
End Constructor
Destructor testtyp
size = 0
DeAllocate(arr)
End Destructor
Property testtyp.array(i As Integer) As Integer
If i >= 0 And i < size Then Return arr[i]
End Property
Property testtyp.array(i As Integer, a As Integer)
If i >= 0 And i < size Then arr[i] = a
End Property
Function testtyp.LBound() As Integer
If arr <> 0 Then
Return 0
Else
Return -1
EndIf
End Function
Function testtyp.UBound() As Integer
If arr <> 0 Then
Return size - 1
Else
Return -1
EndIf
End Function
Function testtyp.Pointr() As UInteger Ptr
Return arr
End Function
Sub testtyp.ReDim(x As Integer)
If x >= 0 Then
arr = ReAllocate(arr, x * SizeOf(Integer))
size = x
EndIf
End Sub
'############################################################################################
Sub testsub(ByRef udt As testtyp) 'Wird standardmäßig ByRef übergeben, ByVal ist aber möglich
Print udt.Pointr()
udt.ReDim(5)
udt.array(0) = 9
udt.array(1) = 7
udt.array(4) = 6
End Sub
Dim testvar As testtyp = 1
testsub(testvar)
Print testvar.array(0)
Print testvar.array(1)
Print
Print testvar.LBound(), testvar.UBound()
testvar.ReDim(6)
Print testvar.LBound(), testvar.UBound()
Print testvar.Pointr()
Sleep
Alternativlösung (Thread-Safe, weitere Variablentypen vorbereitet bzw. ergänzbar): Datenfelder (Arrays) mit variabler Größe in UDTs (TYPEs)
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|