
DefLng A-Z

Private m_HistoryKeys() As String 'Het array - hoe kan het anders!
Private m_HistoryPtr As Integer   'De huidige entry in het array

Public Property Let Size (Count As Long)
' Nieuwe omvang, en verwijder alle entries.
   ReDim m_HistoryKeys(Count)
   m_HistoryPtr = 0
End Property

Public Property Get Key(Direction) As String
'Direction:
' 0, -1/+1: Geef de Key van het gewenste item, relatief 
' aan de huidige pointer, en verplaats de pointer.
' Als het gewenste item niet bestaat, krijg je het huidige 
' (en dat kan vbNullString zijn!) 

' Het array is een stack van unieke strings
' De grenzen van de stack worden bepaald door een of meer 
' vbNullString entries in het array
' De pointer wijst naar het huidige item
   nMax = UBound(m_HistoryKeys)
' Ga alleen naar een bestaand entry
   n = m_HistoryPtr + Direction
   If n > nMax Then n = 0
   If n < 0 Then n = nMax
   If Len(m_HistoryKeys(n)) Then m_HistoryPtr = n
   Key = m_HistoryKeys(m_HistoryPtr)
End Property

Public Sub Add(Key As String)
   nMax = UBound(m_HistoryKeys)
'Zoek een nieuw blanko entry
'Key <> huidige? Anders niet toevoegen want hij is er al!
  If Key <> m_HistoryKeys(m_HistoryPtr) Then
    m_HistoryPtr = m_HistoryPtr + 1: If m_HistoryPtr > _
				nMax Then m_HistoryPtr = 0
    m_HistoryKeys(m_HistoryPtr) = Key
' Zorg dat de volgende entry vbNullString is en daarmee 
' de bovengrens markeert
    n = m_HistoryPtr + 1: If n > nMax Then n = 0
    m_HistoryKeys(n) = vbNullString
  End If
End Sub

Public Sub Delete(Key As String)
  nMax = UBound(m_HistoryKeys)
  For n = 0 To nMax
    If m_HistoryKeys(n) = Key Then 'Gevonden! Verwijder!
    ' Verplaats de navolgende keys 1 terug, tot en met 
    ' de bovengrens (vbNullString)
    p1 = n: p2 = n + 1
    Do: p2 = p1 + 1: If p2 > nMax Then p2 = 0
      m_HistoryKeys(p1) = m_HistoryKeys(p2)
      p1 = p2
    Loop Until m_HistoryKeys(p2) = vbNullString 
    ' Bovengrens verplaatst, klaar
       End If
   Next
    'Zorg dat de pointer naar een bestaande key wijst
     nCheck = m_HistoryPtr
     Do While m_HistoryKeys(m_HistoryPtr) = vbNullString
      m_HistoryPtr = m_HistoryPtr - 1: If m_HistoryPtr < 0 _
					Then m_HistoryPtr = nMax
      If m_HistoryPtr = nCheck Then Exit Do 
     ' 1 keer rondgeweest, geen enkele key, klaar.
     Loop
End Sub

Public Property Get PreviousExists() As Boolean
   n = m_HistoryPtr - 1: If n < 0 Then n = UBound(m_HistoryKeys)
   PreviousExists = (Len(m_HistoryKeys(n)) > 0)
End Property

Public Property Get NextExists() As Boolean
   n = m_HistoryPtr + 1: If n > UBound(m_HistoryKeys) Then n = 0
   NextExists = (Len(m_HistoryKeys(n)) > 0)
End Property


