Zu guter letzt noch eine von mir geschriebene Puffer-Klasse:
Class clsFIFOStack(Of T)
Private stack() As T
Dim blockop As Boolean
''' <summary>
''' Gibt den Pufferinhalt zurück
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
ReadOnly Property StackContent() As T()
Get
Return stack
End Get
End Property
ReadOnly Property StackLength() As Integer
Get
If Not stack.Length = Nothing Then
Return stack.Length
Else
Return 0
End If
End Get
End Property
Public Sub New()
stack = Array.CreateInstance(GetType(T), 0)
End Sub
''' <summary>
''' Liest aus dem Puffer ohne die gelesenen Elemente zu entfernen
''' </summary>
''' <param name="StartIndex">Optional. Index ab dem gelesen werden
' soll</param>
''' <param name="Length">Optiolnal. Länge, die gelesen werden soll.
' Wenn ausgelassen, wird der komplette Puffer zurückgegeben</param>
''' <returns></returns>
''' <remarks></remarks>
Public Function Peek(Optional ByVal StartIndex As Integer = 0, Optional _
ByVal Length As Integer = -1) As T()
'wenn länge ausgelassen wurde, kompletten stack zurückgeben
If Length = -1 Then Length = stack.Length
'ergebnisarray erstellen
Dim result() As T = Array.CreateInstance(GetType(T), Length)
'variablen aus stack ins ergebnis kopieren
Array.Copy(stack, StartIndex, result, 0, Length)
Return result
End Function
Public Function Pop(Optional ByVal length As Integer = 1) As T()
If blockop Then waitforunlock()
blockop = True
'Rückgabe-Array
Dim result() As T
'Temporäres Array
Dim temparray() As T
'wenn eine zu große länge angegeben wurde, auf maximallänge setzen
If length > stack.Length Then length = stack.Length
'Ergebnis aus dem Stack-array lesen
result = Peek(0, length)
'Ein neues, temporoäres Array initialisieren
temparray = Array.CreateInstance(GetType(T), stack.Length - length)
'stack ab lenght - 1(ende der pop-daten) + 1(anfang der restdaten)
' in temparray kopieren
Array.Copy(stack, length, temparray, 0, stack.Length - length)
'stack auf neue größe ändern
Array.Resize(Of T)(stack, temparray.Length)
'restinhalt aus temparray zurück kopieren
Array.Copy(temparray, stack, temparray.Length)
blockop = False
'Ergebnis zurückgeben
Return result
End Function
'Klasse geht im nächsten Teil weiter!!!!!!!!!!!!!!!! ------------------------------------Weiter mit Teil 4--------------------------------------- |