Listen

Übersicht Ressourcen Andere Programme oder Tools

Neue Antwort erstellen

MichaelB

Betreff: Listen

BeitragMo, Nov 22, 2004 12:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Moinsen,

hatte in BB nach Listen gesucht (außer die Type Liste), aber nix gefunden, und weil gestern Sonntag war und schlechtes Wetter habe ich mich mal rangesetzt und selbst eine in BB geschrieben:

Code: [AUSKLAPPEN]

; list.bb

Type iterator
   Field back.iterator
   Field value
   Field forward.iterator
End Type

Type list
   Field pfirst.iterator
   Field cache.iterator
   Field nrcache
   Field count
End Type

Function createList.list()
   ret.list = New list
   Return ret
End Function   
   
Function getIterator.Iterator(a.list, number)
   If number >= 0 And number < a\count Then
      vor = False
      erstersoll = False
      MinEntfernung = a\count - 1

      tmpentfernung = (number + a\count - a\nrcache) Mod a\count
      If tmpentfernung < MinEntfernung Then
         MinEntfernung = tmpentfernung
         vor = True
      EndIf

      If a\count - tmpentfernung <= MinEntfernung Then
         MinEntfernung = a\count - 1 - tmpentfernung;
         vor = False
      EndIf

      If number < MinEntfernung Then
         vor = True
         erstersoll = True
      EndIf

      If a\count - number <= MinEntfernung Then
         vor = False
         erstersoll = True
      EndIf

      If erstersoll Then
         a\cache = a\pfirst
         a\nrcache = 0
      EndIf

      If (vor)
         While(a\nrcache <> number)
            a\nrcache = a\nrcache + 1
            If a\nrcache >= a\count Then
               a\nrcache = 0
            EndIf   
            a\cache = a\cache\forward
         Wend
      Else
         While (a\nrcache <> number)
            a\nrcache = a\nrcache - 1
            If a\nrcache < 0 Then
               a\nrcache = a\count - 1
            EndIf
            a\cache = a\cache\back
         Wend
      EndIf
      Return a\cache
   Else
      RuntimeError("nicht indizierter Zugriff auf Liste ")
   EndIf
End Function

Function getHandle(a.list, number)
   it.Iterator = getIterator(a, number)
   Return it\value
End Function

Function addToList(a.list, hand, pos = -1)
   If (a\count > 0)
      tmp.Iterator = New Iterator
      tmp2.Iterator = Null
         
      If pos >= a\count Or pos < 0 Then
         tmp2 = getIterator(a, 0)
      Else
         tmp2 = getIterator(a, pos)
      EndIf
         
      tmp\value = hand;
      tmp\forward = tmp2
      tmp\back = tmp2\back
         
      tmp2\back\forward = tmp
      tmp2\back = tmp

      If pos = 0 Then   a\pfirst = tmp
   Else
      a\pfirst = New Iterator
      a\pfirst\value = hand
      a\pfirst\forward = a\pfirst
      a\pfirst\back = a\pfirst
   End If
   
   a\cache = a\pfirst
   a\nrcache = 0
   a\count = a\count + 1
End Function
   
Function removeFromList(a.List, number)
   tmp.Iterator = getIterator(a, number)
   tmp\back\forward = tmp\forward
   tmp\forward\back = tmp\back

   If number = 0 Then a\pfirst = tmp\forward

   a\nrcache = 0
   a\cache = a\pfirst
   a\count = a\count - 1
   Delete tmp

   If a\count = 0 Then
      a\pfirst = Null
   EndIf
End Function

Function destroyList(a.list)
   While (a\count > 0)
      removeFromList(a, 0)
   Wend
   Delete a
End Function
   
Function containsList(a.List, hand)
   it.Iterator = a\pfirst
   For i = 0 To a\count
      If it\value = hand Then
         Return True
      Else
         it = it\forward
      EndIf
   Next   
   Return False
End Function

Function getSizeList(a.list)
   Return a\count
End Function

;starttime = MilliSecs()

;SeedRnd 230
;anz = 10000

;mylist = createList()
;For i = 0 To anz
;   addToList(mylist, Rand(0, 100))
;Next

;For i = 0 To anz
;   tmp = getHandle(mylist, Rand(0, getSizeList(mylist) - 1))
;Next

;For i = 0 To anz - 20
;   removeFromList(mylist, Rand(0, getSizeList(mylist) - 1))
;Next

;For i = 0 To getSizeList(mylist) - 1
;   Print getHandle(mylist, i)
;Next

;Print ""
;Print "passed Time: " + (MilliSecs() - starttime) + " ms"


Habe auch noch eine zweite, die auf eine DLL mit interener STL Liste zugreift, die ist wesentlich schneller, bei Interesse Mail an hein-dubty@gmx.de

Gruß Michael
  • Zuletzt bearbeitet von MichaelB am Mo, Nov 22, 2004 13:09, insgesamt einmal bearbeitet

Jan_

Ehemaliger Admin

BeitragMo, Nov 22, 2004 13:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Klingt gut, aber:

Zitat:
Ein Fehler ist aufgetreten. Wenn Du nicht weißt warum der Fehler aufgetreten ist schau bitte in den Hilfstexten nach.

der zurückgegebene Fehler war:

Diese Funktion ist wegen Mangel an Berechtigung nicht zugänglich.
between angels and insects

MichaelB

BeitragMo, Nov 22, 2004 13:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Gesehen und geändert Wink

Neue Antwort erstellen


Übersicht Ressourcen Andere Programme oder Tools

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group