Listen
Übersicht

![]() |
MichaelBBetreff: Listen |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gesehen und geändert ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group