Map/List/Array von Zeigern auf Strukturen

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.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Map/List/Array von Zeigern auf Strukturen

Beitrag von STARGÅTE »

besonders schön ist es nicht, aber immerhin ein Beispiel :allright:

List Jobs.tJOB() ist auch richtig gefüllt, und man kann auch über die NewMap *Jobs.tJOB() auslesen.

Der BUG tritt beim Debug auf.
und zwar genau bei Str() !


Ich konnte es soweit eingrenzen:

Code: Alles auswählen

Global NewMap *Punkt.Point()

Punkt.Point\x = 123
*Punkt("Test") = @Punkt

ForEach  *Punkt()
  Debug Str(*Punkt()\x)
Next 
BZW ist das hier auch merkwürdig:

Code: Alles auswählen

Global NewMap *Punkt.Point()

Punkt.Point\x = 123
Punkt.Point\y = 456

*Punkt("Test") = @Punkt

Debug *Punkt("Test")\x
Debug *Punkt("Test")\y

Debug "---"

ForEach *Punkt()
  Debug *Punkt()\x
  Debug *Punkt()\y
Next 
Habs auch mit an den BUG-Post im eng. Forum gehängt
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
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

Re: Map/List/Array von Zeigern auf Strukturen

Beitrag von NicTheQuick »

So geht's:

Code: Alles auswählen

Structure Point2D
	x.i
	y.i
EndStructure

NewMap *Punkt.Point2D()

Define Punkt.Point2D\x = 123
*Punkt("Test") = @Punkt

Define i.i
Define *t.Point2D

ForEach *Punkt()
	*t = *Punkt()
	Debug *t\x
Next 
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

Re: Map/List/Array von Zeigern auf Strukturen

Beitrag von NicTheQuick »

Scheinbar wird bei ForEach-Methode nicht der MapElement-Heap dazu addiert und mit *Point()\x liest man dann einen Pointer auf ein die Map-Hauptstruktur aus oder ähnliches. Siehe auch folgender Code:

Code: Alles auswählen

Structure Point2D
	x.i
	y.i
EndStructure

NewMap *Punkt.Point2D()

Define Punkt.Point2D\x = 123
*Punkt("Test") = @Punkt

Define i.i
Define *t.Point2D

ForEach *Punkt()
	i = *Punkt()\x
	Debug i
	i = PeekI(i)
	Debug i
	i = PeekI(i)
	Debug i
Next 
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Map/List/Array von Zeigern auf Strukturen

Beitrag von STARGÅTE »

jo aber mach mal das \x weg ^^
sonst kommt gleich der IMA...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Re: Map/List/Array von Zeigern auf Strukturen

Beitrag von helpy »

NicTheQuick hat geschrieben:So geht's: ...
Stimmt! Dann kann ich aber auch statt:

Code: Alles auswählen

NewMap *Punkt.Point2D()
eine Liste mit Integer nehmen:

Code: Alles auswählen

NewMap pPunkt.i()
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Re: Map/List/Array von Zeigern auf Strukturen

Beitrag von helpy »

STARGÅTE hat geschrieben:besonders schön ist es nicht, ...
;-( ... dabei beruht es auf einem Teil, das ich gerade dran bin zu schreiben.

Da geht es um Netzwerk-Kommunikation ... die einzelnen Sende-Aufträge (Jobs) lege ich in folgender Struktur ab:

Eine Map für jede Netzwerk-Verbindung (Connection)
-----> Ein Array für Prioritäten 0-9
-------------> Eine Liste der Sende-Aufträge
Eine Map mit Zeigern auf alle Sende-Aufträge

Die Sende-Aufträge werden in Blöcke aufgeteilt und je nach Priorität über die entsprechende Netzwerk-Verbindung verschickt. Die Blöcke werden verschachtelt, wobei Blöcke mit höherer Priorität in kleineren Zeitabständen verschickt werden als Blöcke mit niedriger Priorität.

Über JobID kann ich so schnell und unkompliziert auf einzelne Aufträge zugreifen und deren Status abfragen, ohne dass ich mich durch eine Struktur hangeln muss.
STARGÅTE hat geschrieben:besonders schön ist es nicht, ...
Falls Du also eine Idee hast, wie ich dass effizienter verwalten kann, wäre ich für einen Tipp dankbar ;-)

cu,
guido
Windows 10
PB Last Final / (Sometimes testing Beta versions)
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

Re: Map/List/Array von Zeigern auf Strukturen

Beitrag von NicTheQuick »

Um Prioritäten zu verwalten, würde ich mir an deiner Stelle mal einen Max- oder Min-Heap anschauen. Siehe Wikipedia - Heap (Datenstruktur) und Vorrangdatenschlange.
Antworten