Doppelt Verkettete Liste mit Banks
Übersicht

GomboloBetreff: Doppelt Verkettete Liste mit Banks |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vor ein paar Tagen wollte ich es wissen.
Sind Banks schneller als Types? 8) Dazu wurde eine doppelt verkettete Liste mit Banks programmiert. So das man neue Objekte einfügen kann, welche Löschen etc... Also alles was man auch mit Types machen kann sollte auch mit den Objekten in der Liste funktionieren. Das Ergebniss bei mir war etwas entäuschen. Ich hatte angenommen das Banks etwas schneller sind. Nun beide sind, bei mir auf dem Rechner, gleich schnell. Hier der Code und zwei Beispielprogramme. Eine verwendet die List und das andere BB Types. Code: [AUSKLAPPEN] ;#################################################### ; Object Manager (Test Version) ; ; Author : Gombolo / 3DKult ; E-Mail : ; Web Site: ; ;#################################################### ; ; Beschreibung: ; ; Speicher Name Beschreibung ; |----------|--------------------------------------- ; | 0 | SIZE_ | Anzahl der Elemente ; |----------|------------|-------------------------- ; | 4 | NEXT_ | Nächstes Element ; |----------|------------|-------------------------- ; | 8 | PREV_ | Vorgänger Element ; |----------|------------|-------------------------- ; | 12 | DATA_ | Daten ; |----------|------------|-------------------------- ; ;#################################################### ;#################################################### ; Konstante ;#################################################### Const SIZE_ = 0 Const NEXT_ = 4 Const PREV_ = 8 Const DATA_ = 12 ;#################################################### ; Type ;#################################################### ;#################################################### ; Functionen ;#################################################### ;#################################################### ; NAME : gxCreateList() ; PARAMETER : keine ; BESCHREIBUG: Erstellt erstes Element ; einer neuen List ;#################################################### Function gxCreateList() Local bank_% bank_ = CreateBank(16) PokeInt bank_, SIZE_, 0 PokeInt bank_, NEXT_, 0 PokeInt bank_, PREV_, 0 PokeInt bank_, DATA_, 0 Return bank_ End Function ;#################################################### ; NAME : gxFreeBank(bank) ; PARAMETER : bank = Zeiger auf eine Speicherbank ; BESCHREIBUG: Gibt Speicher wieder frei ;#################################################### Function gxFreeBank(bank_%) FreeBank(bank_) Return 0 End Function ;#################################################### ; NAME : gxDeleteList(bank) ; PARAMETER : bank = Zeiger auf Listenanfang ; BESCHREIBUG: Löscht alle Elemente einer Liste ;#################################################### Function gxDeleteList(bank_%) Local temp_% While(bank_<>0) temp_ = bank_ bank_ = PeekInt(bank_,NEXT_) gxFreeBank(temp_) Wend Return 0 End Function ;#################################################### ; NAME : gxDeleteBank(bank) ; PARAMETER : list = Adresse der Liste ; bank = Element das gelöscht wird ; BESCHREIBUG: Löscht ein Elemente aus der Liste ;#################################################### Function gxDeleteBank(list_%,bank_%) If(bank_=0) Return list_ Local tempPrev_%, tempNext_% PokeInt(list_,SIZE_,PeekInt(list_,SIZE_)-1) tempNext_ = PeekInt(bank_,NEXT_) tempPrev_ = PeekInt(bank_,PREV_) If(tempNext_<>0) PokeInt(tempNext_,PREV_,tempPrev_) EndIf If(tempPrev_=0) PokeInt(tempNext_,SIZE_,PeekInt(list_,SIZE_)) list_ = tempNext_ Else PokeInt(tempPrev_,NEXT_,tempNext_) End If gxFreeBank(bank_) Return list_ End Function ;#################################################### ; NAME : gxLoadMesh(list, filename) ; PARAMETER : list = Listenanfang ; filename = Datei welches geladen wird ; BESCHREIBUG: Ladet ein Mesh und füngt ein neues ; Element in die Liste ein. Gibt ; erstelltes Element zurück ;#################################################### Function gxLoadMesh(list_%, filename_$) Local temp_%, bank_%, ret_% If(list_=0) Return 0 If(PeekInt(list_,SIZE_)=0) PokeInt(list_,SIZE_,PeekInt(list_,SIZE_)+1) PokeInt(list_,NEXT_,0) PokeInt(list_,PREV_,0) PokeInt(list_,DATA_,LoadMesh(filename_)) Return list_ Else PokeInt(list_,SIZE_,PeekInt(list_,SIZE_)+1) While(PeekInt(list_,NEXT_)<>0) list_=PeekInt(list_,NEXT_) Wend bank_ = gxCreateList() PokeInt(bank_,SIZE_,0) PokeInt(bank_,NEXT_,0) PokeInt(bank_,PREV_,list_) PokeInt(bank_,DATA_,LoadMesh(filename_)) PokeInt(list_,NEXT_,bank_) Return bank_ EndIf Return 0 End Function ;#################################################### ; NAME : gxNext(list) ; PARAMETER : list = Listenanfang ; BESCHREIBUG: Gib das Element nach list zurück ;#################################################### Function gxNext(list_%) If(list_<>0) Return PeekInt(list_,NEXT_) Else Return 0 EndIf End Function ;#################################################### ; NAME : gxSize(list) ; PARAMETER : list = Listenanfang ; BESCHREIBUG: Gibt Anzahl aller Elemente zurück ;#################################################### Function gxSize(list_%) If(list_<>0) Return PeekInt(list_,SIZE_) Else Return 0 EndIf End Function ;#################################################### ; NAME : gxMesh(list) ; PARAMETER : list = Listenanfang ; BESCHREIBUG: Gibt Mesh zurück ;#################################################### Function gxMesh(list_%) If(list_<>0) Return PeekInt(list_,DATA_) Else Return 0 EndIf End Function ;#################################################### ; NAME : gxEnd(list) ; PARAMETER : list = Listenanfang ; BESCHREIBUG: Gibt letztes Element zurück ;#################################################### Function gxEnd(list_%) If(list_=0) Return 0 While(PeekInt(list_,NEXT_)<>0) list_ = PeekInt(list_,NEXT_) Wend Return list_ End Function ;#################################################### ; NAME : gxFirst(list) ; PARAMETER : list = Listenanfang ; BESCHREIBUG: Gibt erstes Element zurück ;#################################################### Function gxFirst(list_%) Return list_ End Function ; GLOBAL FPS Global TFPS Global FPS Global TimerFPS Graphics3D 640,480,16,2 WireFrame 1 eCam% = CreateCamera() eLight%= CreateLight() bRun% = True list% = gxCreateList() timeStart = MilliSecs() For i=1 To 100 mesh = gxLoadMesh(list,"plane.3ds") EntityColor(gxMesh(mesh),Rand(0,255),Rand(0,255),Rand(0,255)) Cls Text 10,10,i*100/100+"%" Flip(0) Cls Next time = MilliSecs()-timeStart MoveEntity eCam,0,0,-500 While(bRun) cnt%=0 temp=list While(temp<>0) cnt=cnt+1 TurnEntity(gxMesh(temp),1,Rand(1,4),1) temp=gxNext(temp) Wend RenderWorld() ShowFPS() Text 10,15,"Objekte :"+cnt Text 10,35,"Build :"+time+"ms" Flip(0) Cls() If(KeyHit(1)) bRun = False Wend Function ShowFPS () Color 255,255,0 TFPS = TFPS + 1 If MilliSecs () - TimerFPS => 1000 Then TimerFPS = MilliSecs () FPS = TFPS TFPS = 0 End If Text (10,0,"FPS : "+FPS) End Function Die Version mit Type Code: [AUSKLAPPEN] ; TYPE Type TENTITY Field ePlane End Type ; GLOBAL FPS Global TFPS Global FPS Global TimerFPS Graphics3D 640,480,16,2 WireFrame 1 eCam% = CreateCamera() eLight%= CreateLight() bRun% = True timeStart = MilliSecs() For i=1 To 100 entity.TENTITY = New TENTITY entity\ePlane = LoadMesh("plane.3ds") EntityColor(entity\ePlane,Rand(0,255),Rand(0,255),Rand(0,255)) Cls Text 10,10,i*100/100+"%" Flip(0) Cls Next time = MilliSecs()-timeStart MoveEntity eCam,0,0,-500 While(bRun) cnt%=0 temp=list For T.TENTITY = Each TENTITY cnt=cnt+1 TurnEntity(T\ePlane,1,Rand(1,4),1) Next RenderWorld() ShowFPS() Text 10,15,"Objekte :"+cnt Text 10,35,"Build :"+time+"ms" Flip(0) Cls() If(KeyHit(1)) bRun = False Wend Function ShowFPS () Color 255,255,0 TFPS = TFPS + 1 If MilliSecs () - TimerFPS => 1000 Then TimerFPS = MilliSecs () FPS = TFPS TFPS = 0 End If Text (10,0,"FPS : "+FPS) End Function |
||
Heute ist der erste Tag vom Rest deines Lebens
http://gombolo.go.funpic.de/ |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group