ReDim

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

ReDim

Beitrag von Nero »

Nabend,

Ich habe mir eben mal eine ReDim Procedure geschrieben mit der man
Arrays vergrößern oder verkleinern kann.
Vieleicht kann es ja noch jemand hier brauchen.

Der Procedure einfach den Pointer des Arrays, die neue länge und die länge der array felder (nur bei structuren wichtig ansonsten NULL oder 4 übergeben)

Es wird der Pointer auf das neue Array zurückgegeben den einfach dem alten Array zuweisen und vertig.

Kleiner Beispiel code

Code: Alles auswählen

Procedure ReDim(Pointer.l, Len.l, Fieldlen.l)

fLen.l = SizeOf(LONG)

If Fieldlen <> 0 : fLen = Fieldlen : EndIf

Fields.l = PeekL(Pointer - 8)
If Len < Fields 
    
  PokeL(Pointer - 8, Len + 1)
  ProcedureReturn Pointer
Else

oldArrayLen.l = (Fields * fLen + 8) 
newArrayLen.l = (Len * fLen)


newArray = AllocateMemory(newArrayLen + 8)
CopyMemory(Pointer - 8, newArray, oldArrayLen)

PokeL(newArray, newArrayLen)

ProcedureReturn newArray
EndIf
EndProcedure

Structure User
      ID.l
      Files.l
EndStructure

Dim StructTest.User(0)

StructTest(0)\ID = 1
StructTest(0)\Files = 2000

Debug StructTest(0)\ID
Debug StructTest(0)\Files

StructTest() = ReDim(@StructTest(), 9, 8)

StructTest(0)\ID = 1
StructTest(0)\Files = 91532
StructTest(3)\ID = 4
StructTest(3)\Files = 1010101
StructTest(7)\ID = 8
StructTest(7)\Files = 9000
StructTest(9)\ID = 10
StructTest(9)\Files = 123123

Debug StructTest(0)\ID
Debug StructTest(0)\Files
Debug StructTest(3)\ID
Debug StructTest(3)\Files
Debug StructTest(7)\ID
Debug StructTest(7)\Files
Debug StructTest(9)\ID
Debug StructTest(9)\Files

StructTest() = ReDim(@StructTest(), 3, 8)

Debug StructTest(0)\ID
Debug StructTest(0)\Files
Debug StructTest(3)\ID
Debug StructTest(3)\Files

Ich habs auch mal als UserLib erstellt -> http://www.communityworld.de/redim.zip
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Beitrag von Nero »

So hab nochmal ne kleinigkeit geändert.

http://www.communityworld.de/redim.zip oder einfach oben die Procedure nehmen
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8812
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Ich benutze dazu einfach nochmal [c]Dim[/c]. :?
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Beitrag von Nero »

Stimmt schon der nutzen ist etwas fragwürdig *g* allerdings war es auch nur ne übung um mich mit dem aufbau und verwaltung der arrays im speicher etwas vertraut zu machen damit mein kleines projeckt losgehen kann.

Aber vieleicht hat auch jemand dafür verwendung daher hab ich es mal gepostet.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

als persönliche übung ist das auch gewiß nützlich ;)

und posten ist auch nicht verkehrt, vielleicht bekommst du ja von den echten speicherverwaltungs-cracks noch tipps.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Beitrag von Nero »

Naja jeder fängt klein an *g*

Hab PB jetzt schon so lange und nie wirklich was mit gemacht das will ich
nun mal ändern und da dachte ich mir ich bau mir nen Level editor für RPG maps.

Najo leider gefiel mir die technik wie die sprites aus nem tileset
geschnitten werden nicht was mich widerum zu einem eigenem TileSet format inspirierte :) Dann fand ich von MVXA den thread über seine RamDisk welche sich dazu recht gut eignete nur war sie noch nen weng Bugy er hatt sie zwar gefixt und mir den Code gegeben allerdings
gibts da keine Verzeichnis structur und er nuzt dafür Linked list was mir nicht gefiel daher bin ich vom Level Editor zum TileSet format und nun bei ner eigenen implementation eines MemoryDrives auf basis von arrays zu erstellen gelandet. :?
Das grobe DateiSystem hab ich mir schon ausgearbeitet nur ohne das notige wissen über arrays und wie man die im speicher am besten manipuliert will ich es erst garnicht anfangen also erstmal fleisig übungs code tippen. :)

Über umwege kommt man halt auch irgentwann mal zum Ziel *lol*
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich persönlich verwende lieber einzelsprites statt eines tisets.

im graka-speicher beansprucht das auch nicht mehr platz,
und das clipping zur laufzeit entfällt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Beitrag von Nero »

Geht mir genauso nur ich mag es nicht wen ich massig einzelne images dafür
in nem ordner habe. Mit so nem MemDrive läst sich das aber umgehen und man kann auch seine Maps und die verschiedenen layer darin speichern ohne sich groß gedanken über ein map format zu machen welches alles beinhaltet
einfach einfach den memdrive laden und man hat auf alle nötigen daten zugrif direckt im speicher kann sie dort ändern und wen man vertig ist einfach den MemDrive sichern.

Es ist halt universell einsetzbar und muß ja auch nicht unbedingt nur für Maps ect. herhalten.
Antworten