Page 1 sur 1

Adresse des Map / List / Array

Publié : ven. 14/mars/2014 1:02
par graph100
Le problème ne se pose peut-être pas pour les Array, cependant pour les listes et les map, on ne peux pas récupérer leur "adresse".
Seulement l'adresse de l'élément courant.

C'est un problème dans le cas suivant :

Code : Tout sélectionner

Structure bla
	Map *mon_test.POINT()
EndStructure


NewMap test.POINT()

*adr.bla\mon_test() = test()

le but de ce code exemple est d'assigner la map dans la structure pour un accès ultérieur. Ce serait le même problème pour une liste.
Une procédure permet de passer des map, list et array en paramètres, j'aimerais que ces fonctionnalités soient étendues pour prendre en compte le cas que je viens de souligner.

pour le moment le seul moyen d'arriver à mes fin est le suivant :

Code : Tout sélectionner

Structure bla_maitre
	Map mon_test.POINT()
EndStructure

Structure bla
	a.l
	b.l
	
	*map_mon_test.bla_maitre
EndStructure


InitializeStructure(variable.bla_maitre, bla_maitre)

variable\mon_test("YO")\x = 2
variable\mon_test("YO")\y = 5


Define adr.bla
adr\map_mon_test = @variable


Debug adr\map_mon_test\mon_test("YO")\y

Re: Adresse des Map / List / Array

Publié : sam. 15/mars/2014 17:01
par nico
Tu peux faire comme ceci aussi:

Code : Tout sélectionner

*pointer.Point = FindMapElement(variable\mon_test(), "YO")
Debug *pointer\y

Re: Adresse des Map / List / Array

Publié : lun. 17/mars/2014 21:13
par graph100
non.

La différence est que tu accèdes directement à l'adresse d'un élément.
Le but du code que j'ai posté est d'obtenir l'adresse de la MAP dans sa globalité, de l'objet map pour pouvoir l'utiliser ensuite.

Re: Adresse des Map / List / Array

Publié : jeu. 23/avr./2015 8:03
par PAPIPP
Bonjour Graph_100

et comme cela

Code : Tout sélectionner

NewMap TEST1.POINT()  
	test1("GH")\x=2 
	test1()\x=5 
	Debug " **** ADRESSES MAP" 
	Debug TEST1()
; 	Debug TEST1()-SizeOf(POINT) 
	Debug @test1("GH")\x 
	Debug @test1()\y 
	 
	NewList LISTE.POINT() 

	AddElement(LISTE()) 
	
	LISTE()\x=4 
	LISTE()\Y=9 
	Debug " **** ADRESSES LISTE" 
	 
	Debug liste() 
	Debug @liste()\x 
	Debug @liste()\Y 
			 
A+

Re: Adresse des Map / List / Array

Publié : jeu. 23/avr./2015 9:28
par PAPIPP
Bonjour à tous
Je viens de regarder le généré ASM avec l'instruction copymap(map1(),map2())
Je trouve des différences entre toutes ces valeurs d'adresses

Code : Tout sélectionner

NewMap TEST1.POINT()
NewMap TEST2.POINT()
test1("GH")\x=2
test1()\x=5
Debug " **** ADRESSES MAP"
Debug TEST1()
; 	Debug TEST1()-SizeOf(POINT)
Debug @test1("GH")\x
Debug @test1()\y
CopyMap(TEST1(),TEST2())
Debug " **** ADRESSES MAP"
Debug TEST2()
; 	Debug TEST2()-SizeOf(POINT)
Debug @test2("GH")\x
Debug @test2()\y
Define ATEST1.l , ATEST2.l 
; Autre solution à partir du généré ASM m_TEST1 adresse de la MAP TEST1 et m_TEST2 adresse de la MAP TEST2

!mov  EAX ,dword [m_TEST1]
!mov   dword [v_ATEST1], EAX
!mov  EAX ,dword [m_TEST2]
!mov   dword [v_ATEST2], EAX

Debug ATEST1
Debug ATEST2

; Copie du généré  ASM 
; ; CopyMap(TEST1(),TEST2())
;   PUSH   dword [m_TEST2]
;   PUSH   dword [m_TEST1]
;   CALL  _PB_CopyMap@8
; ; Debug " **** ADRESSES MAP"
; ; Debug TEST2()
; ; 
; ; Debug @test2("GH")\x
; ; Debug @test2()\y
; ; Define ATEST1.l , ATEST2.l 
; ; 
; ; 
; ; !mov  EAX ,dword [m_TEST1]
; MOV  EAX ,dword [m_TEST1]
; ; !mov   dword [v_ATEST1], EAX
; MOV   dword [v_ATEST1], EAX
; ; !mov  EAX ,dword [m_TEST2]
; MOV  EAX ,dword [m_TEST2]
; ; !mov   dword [v_ATEST2], EAX
; MOV   dword [v_ATEST2], EAX
; ; 
; ; Debug ATEST1
; ; Debug ATEST2
; 

Re: Adresse des Map / List / Array

Publié : jeu. 23/avr./2015 9:37
par falsam
Les bots ont au moins un intérêt : Celui de réveiller des sujets enterrés depuis plus d'un an :)

Re: Adresse des Map / List / Array

Publié : jeu. 23/avr./2015 10:28
par Demivec
falsam a écrit :Les bots ont au moins un intérêt : Celui de réveiller des sujets enterrés depuis plus d'un an :)
:)


graph100:

Ma tentative:

Code : Tout sélectionner

Structure map_POINT
  Map mon_map.POINT()
EndStructure   

Global NewList map_POINTs.map_POINT()

Procedure create_new_Map_POINT_addresses(x.i = 1)
  Protected i, compter
  
  For i = 1 To x
    If AddElement(map_POINTs())
      compter + 1
    EndIf
  Next
  
  ProcedureReturn compter
EndProcedure

Procedure delete_Map_POINT(*x.map_POINT)
  If ListSize(map_POINTs()) > 0
    ChangeCurrentElement(map_POINTs(), *x)
    DeleteElement(map_POINTs())
  EndIf
EndProcedure


Define i, k$, x

If create_new_Map_POINT_addresses(6)
  ;créer des données aléatoires
  x = ListSize(map_POINTs()) ; x > 0
  For i = 1 To 5 * x
    SelectElement(map_POINTs(), Random(x - 1))
    k$ = Chr(Random(25) + 'A') + Chr(Random(25) + 'A')
    map_POINTs()\mon_map(k$)\x = Random(49, 0)
    map_POINTs()\mon_map()\y = Random(100, 50)
  Next


  ForEach map_POINTs()
    Debug "Map Addresse: " + @map_POINTs()
    
    ForEach map_POINTs()\mon_map()
      Debug "  '" + MapKey(map_POINTs()\mon_map()) + "': " + map_POINTs()\mon_map()\x + ", " + map_POINTs()\mon_map()\y
    Next
  Next
  
  
  Debug "-------------------------"
  Define *adr.map_POINT
  
  SelectElement(map_POINTs(), Random(ListSize(map_POINTs()) - 1))
  *adr.map_POINT = @map_POINTs()
  

  ;supprimer un élément
  If MapSize(*adr\mon_map()) > 0
    ResetMap(*adr\mon_map())
    NextMapElement(*adr\mon_map())
    DeleteMapElement(*adr\mon_map())
  EndIf
  
  ;créer nouvel élément
  *adr\mon_map("crayon")\x = 1001: *adr\mon_map()\y = 2001
  
  Debug "Map Addresse: " + *adr
  ForEach *adr\mon_map()
    Debug "  '" + MapKey(*adr\mon_map()) + "': " + *adr\mon_map()\x + ", " + *adr\mon_map()\y
  Next
  
EndIf
@:édition: Merci à Ollivier pour la correction de ma grammaire.

Re: Adresse des Map / List / Array

Publié : ven. 24/avr./2015 18:02
par Ollivier
"Ma tentative". (Le suffixe "*ive" indique un féminin comme "*tion")

(For objects, ideas and all that's not a person)
Langue anglaise : 1 genre (its answer)
Langue française : 2 genres (masculin, féminin)
Langue allemande : 3 genres (masculin, féminin et neutre)

(Lots of foreigners say french language is difficult. )

Merci beaucoup Demivec pour ton double effort:
- Le 1er de proposer des réponses techniques
- Le 2nd de traduire

Don't worry: french online press write worse than you.

Merci à Papipp aussi évidemment.

Re: Adresse des Map / List / Array

Publié : sam. 25/avr./2015 1:19
par Demivec
Ollivier a écrit :Don't worry: french online press write worse than you.
Merci Ollivier. :oops: :)

Re: Adresse des Map / List / Array

Publié : mar. 28/avr./2015 21:52
par graph100
Ahah ! Merci Rhiannnna.

Ca vous a fait réfléchir du coup :lol:
Sinon, je suis plus trop présent, premier taff oblige :roll:
Pis avec le taff je nage dans le javascript et les web tech, donc PB c'est pas optimal (j'essaye de bien comprendre tout ça et ensuite peut-être Spriderbasic)