Advertisement
Guest User

Untitled

a guest
Jan 18th, 2019
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. '** Function for testing
  2. Public Sub testing()
  3.     Dim arr As List
  4.     Set arr = New List
  5.     arr.Init 2, 3, 4
  6.     arr.Insert 9, "Final"
  7. End Sub
  8.  
  9. '** List Class
  10. Private internalData() As Variant
  11. Private internalName() As String
  12.  
  13. ' Public Functions
  14.  
  15. Public Sub Init(ParamArray data() As Variant)
  16.     For i = 0 To UBound(data)
  17.         Call Insert(data(i))
  18.     Next i
  19. End Sub
  20.  
  21. Public Sub Insert(data As Variant, Optional name As String)
  22.     Dim i As Integer
  23.     If (Not internalData) = -1 Then
  24.         i = 0
  25.     Else
  26.         i = UBound(internalData) + 1
  27.     End If
  28.     Call ResizeTo(i)
  29.    
  30.     If name = "" Then
  31.         internalName(i) = i
  32.     Else
  33.         SetName i, name
  34.     End If
  35.    
  36.     internalData(i) = data
  37. End Sub
  38.  
  39. Public Function GetValue(Optional index As Integer, Optional name As String) As Variant
  40.     If IsMissing(index) And IsMissing(name) Then
  41.         GetValue = internalData(-1)
  42.     ElseIf name = "" Then
  43.         GetValue = internalData(index)
  44.     Else
  45.         GetValue = internalData(GetIndexFromName(name))
  46.     End If
  47. End Function
  48.  
  49. Private Sub SetValue(Value As Variant, Optional index As Integer, Optional name As String)
  50.     On Error GoTo noArg
  51.    
  52.     If IsMissing(index) And IsMissing(name) Then
  53.         Err.Raise 514, "SetValue", "No Arguments Given"
  54.     ElseIf IsMissing(name) Then
  55.         internalData(index) = Value
  56.     Else
  57.         internalData(GetIndexFromName(name)) = Value
  58.     Else
  59.         MsgBox ("Something went wrong in SetValue")
  60.         End
  61.     End If
  62.    
  63. onArg:
  64.     MsgBox ("No argument was given for index or name.")
  65.     End
  66. End Sub
  67.  
  68. ' Private Functions
  69.  
  70. Private Sub ResizeTo(size As Integer)
  71.     ReDim Preserve internalData(0 To size)
  72.     ReDim Preserve internalName(0 To size)
  73. End Sub
  74.  
  75. Private Function GetIndexFromName(name As String) As Integer
  76.     On Error GoTo noIndex
  77.    
  78.     For i = 0 To UBound(internalName)
  79.         If internalName(i) = name Then
  80.             GetIndexFromName = i
  81.             Exit Function
  82.         End If
  83.     Next i
  84.    
  85.     Err.Raise 513, "GetIndexFromName", "No index found"
  86.    
  87. noIndex:
  88.     MsgBox ("Error 513: No index found for name " & name & " in array.")
  89.     End
  90. End Function
  91.  
  92. Private Sub SetName(index As Integer, name As String)
  93.     On Error GoTo alreadyExists
  94.    
  95.     If (Not NameExists(name)) Then
  96.         internalName(index) = name
  97.     Else
  98.         Err.Raise 515, "SetName", "Name exists"
  99.     End If
  100.    
  101. alreadyExists:
  102.     MsgBox ("Name already exists in array.")
  103.     End
  104. End Sub
  105.  
  106. Private Function NameExists(name As String) As Boolean
  107.     For i = 0 To UBound(internalName)
  108.         If internalName(i) = name Then
  109.             NameExists = True
  110.             Exit Function
  111.         End If
  112.     Next i
  113.     NameExists = False
  114. End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement