Seite 1 von 1

Pointer to List()! Wie?

Verfasst: 27.03.2023 11:30
von SMaag
Wie bekommt man Pointer auf Listen ähnlich der Übergabe eine Liste an eine Procedure

so ist es kein Problem

Code: Alles auswählen

Procedure Test(List MyList.i())
  AddElement MyList()
EndProcedure
Jetzt das ganze, wenn die Liste innerhalb der Procedure mit Pointer sein soll

Code: Alles auswählen

Global NewList List1.i(), NewList List2.i()

Procedure TestListPointer()
   Protected *ptrList
   ; Protected List *ptrList

  *ptrList = @List1()
  AddElement (*ptrList)

  *ptrList =@List2()
  AddElement (*ptrList)

EndProcedure
ich bekomm das nicht gebacken!
geht das überhaupt irgendwie?

Re: Pointer to List()! Wie?

Verfasst: 27.03.2023 11:52
von STARGÅTE
So direkt leider nicht.
Da musst du dir eine Helfer-Struktur machen und dann den Pointer der Struktur-Daten übergeben:

Code: Alles auswählen

Structure MyList
	List List0.i()
EndStructure

Global MyList1.MyList, MyList2.MyList

Procedure TestListPointer()
	
	Protected *ptrList.MyList
	
	*ptrList = @MyList1
	AddElement (*ptrList\List0())
	
	*ptrList = @MyList2
	AddElement (*ptrList\List0())
	
EndProcedure

TestListPointer()

ShowVariableViewer()
CallDebugger

Re: Pointer to List()! Wie?

Verfasst: 27.03.2023 18:17
von Benubi
Das geht nur mit in Strukturen eingebauten PB Linked Lists (Arrays, Maps...). Diese Daten-Typen bzw. Struktur-Elemente für Listen, Array und Maps sind auch größer als nur 1 Zeiger/Integer. Es wird also eine Struktur implementiert und nicht ein Zeiger auf eine Struktur (k.A. ob es deswegen nur indirekt geht).

Code: Alles auswählen

Structure MyMap
   Map env.s()
EndStructure

Procedure$ ReplaceEnvVariables(String$, *Env.MyMap)

  Debug "MyMap pointer"
  Debug *Env
  Debug @*Env\env() ; <- !?

EndProcedure

Define bla.MyMap

Debug ReplaceEnvVariables("Hello", bla)

Danke

Verfasst: 29.03.2023 10:20
von SMaag
So hab ich das jetzt im Prinzip gelöst, das listen von Listen!

Code: Alles auswählen

Structure TListWraper
  List MyList.i()
EndStructure

NewList Lister.TListWraper()

For I=1 To 5
  AddElement(Lister())
  For N = 1 To 20
    AddElement(Lister()\MyList())
    Lister()\MyList() = I
  Next 
Next 

ResetList(Lister())
ForEach Lister()
  Debug "Lister " 
  ResetList(Lister()\MyList())
  
  ForEach Lister()\MyList()
    Debug Lister()\MyList()
  Next
Next


Re: Pointer to List()! Wie?

Verfasst: 29.03.2023 13:57
von NicTheQuick
Du brauchst kein ResetList() vor einem ForEach. :-)