diff --git a/src/__pycache__/model.cpython-39.pyc b/src/__pycache__/model.cpython-39.pyc index 6de2094..e4e5fa3 100644 Binary files a/src/__pycache__/model.cpython-39.pyc and b/src/__pycache__/model.cpython-39.pyc differ diff --git a/src/model.py b/src/model.py index b7e6cbc..c4380bc 100644 --- a/src/model.py +++ b/src/model.py @@ -253,20 +253,20 @@ class Objects: class Space: __arrows = [] - nb_arrows = 0 + nb_occupied_sites = 0 def __init__(self, node): self.node = node for child in node: if(child.tag == "arrow"): - self.nb_arrows += 1 + self.nb_occupied_sites += 1 self.__arrows.append(Arrow(child)) def get_arrow(self, i): return self.__arrows[i] - def get_nb_arrows(self): - return self.nb_arrows + def get_nb_occupied_sites(self): + return self.nb_occupied_sites def get_weight(self, cell, site): return 4096 diff --git a/src/space.py b/src/space.py index c4f53aa..a7bd365 100644 --- a/src/space.py +++ b/src/space.py @@ -1,13 +1,64 @@ +""" +STRUCTURES DE DONNÉES + +1) STOCKAGE + -------- +- XML + Chaque espace est stocké sous forme d'une séquence d'arrows. + Chaque arrow associe les coordonnées d'une cellule, un n° de site et un poids + (le poids, 'weight', indique le nombre de flèches dans ce site). + Seuls les sites contenant des flèches sont mentionnés dans cette séquence. + Par convention, les autres sites sont supposés vides. + +2) TRAVAIL + ------- +- si la taille de l'espace est constante, + et le nombre maximal de flèches par site peu élevé, + alors, l'espace peut être représenté par une string + sinon par une liste. + +- Le but de ces structure est: + * la visualisation (lors de l'exécution des transitions et des undo/redo). + * l'édition de l'espace. + +DISCUSSION + +Les éléments d'interêt pour le moteur graphique sont dans un tableau. +Ce tableau est créé par lxml lors de la lecture (parsing) du fichier XML. +Il est lu / écrit par des fonctions en C +qui peuvent aller d'une case à l'autre par de simples additions. + +Cependant,ce tableau ne répertorie que les sites occupés. +Un calcul est donc nécessaire chaque fois qu'un site y a été trouvé +s'il faut construire une image à la localisation indiquée par ses coordonnées. +NB Les sites non mentionnés dans ce tableau sont supposés vides. + +Si un deuxième tableau est utilisé, +alors, des recopies périodiques dans le tableau lxml seront nécessaires. + +Cependant, dans le cas d'un espace de taille constante (cas le plus fréquent), +c'est un tableau de tout l'espace (et pas seulement des sites occupés) qui sera +construit. +Ce tableau permettra d'accéder au contenu de chaque site en une seule étape, +par un calcul simple. +Et ce calcul sera le même que celui effectué pour produire l'image. + +Cette représentation peut améliorer la lisibilité des algorithmes d'édition. +Par ailleurs, lors de l'édition, aucune optimisation graphique n'est nécessaire. + +""" + import model sp = model.testmodel.get_states().get_space(0) size = model.testmodel.get_parameters().spaceparam.get_dimension().get_x() sites = int(model.testmodel.get_parameters().spaceparam.get_site_multiplicity()) -nb_arrows = int(model.testmodel.get_states().get_space(0).get_nb_arrows()) +occupied = int(model.testmodel.get_states().get_space(0).nb_occupied_sites) print("\nspace size =", size, " nb de sites par cellule =", sites, - " nb total de flèches dans l'espace =", nb_arrows, end='\n') + " nb de sites occupés dans l'ensemble de l' l'espace =", + occupied, end='\n') view = ' | ' @@ -24,7 +75,7 @@ view = ' | ' for n in range(0, size + 1): for s in range(0, sites): arr = 0 - for a in range(0, nb_arrows): + for a in range(0, occupied): if ( sp.get_arrow(a).get_coord("x") == n and sp.get_arrow(a).get_site() == s @@ -40,10 +91,10 @@ for n in range(0, size + 1): coord = ' ' * sites + ' ' for k in range(0, size + 1): - if k < 9: - coord += str(k + 1) + ' ' + ' ' * sites * 2 + if k < 10: + coord += str(k) + ' ' + ' ' * sites * 2 else: - coord += str(k + 1) + ' ' + ' ' * sites * 2 + coord += str(k) + ' ' + ' ' * sites * 2 print(view) print(coord)