Seite 2 von 2

Re: Map/List/Array von Zeigern auf Strukturen

Verfasst: 16.07.2010 18:15
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

Re: Map/List/Array von Zeigern auf Strukturen

Verfasst: 16.07.2010 18:30
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 

Re: Map/List/Array von Zeigern auf Strukturen

Verfasst: 16.07.2010 18:34
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 

Re: Map/List/Array von Zeigern auf Strukturen

Verfasst: 16.07.2010 18:36
von STARGÅTE
jo aber mach mal das \x weg ^^
sonst kommt gleich der IMA...

Re: Map/List/Array von Zeigern auf Strukturen

Verfasst: 16.07.2010 18:39
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()

Re: Map/List/Array von Zeigern auf Strukturen

Verfasst: 16.07.2010 18:48
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

Re: Map/List/Array von Zeigern auf Strukturen

Verfasst: 16.07.2010 19:00
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.