GraphTranslator

From VLE

Jump to: navigation, search

GraphTranslator

GraphTranslator est une petite classe C++ disponible dans la bibliothèque translator des VFL pour la construction de structures de modèles à partir d'une matrice d'adjacence. Les conditions pour initialiser le GraphTranslator sont les suivantes :

<map>
 <key name="prefix">
  <!-- donne le préfixe des noms des nœuds. Par défaut, « vertex » est utilisé. -->
  <string>node</string>
 </key>
 <key name="number">
  <!-- donne le nombre de nœuds à créer. -->
  <integer>7</integer>
 </key>
 <key name="adjacency matrix">
  <!-- la matrice d'adjacence (tableau de booléens) crée les connexions entre
       les nœuds. Par exemple pour la matrice de deux nœuds suivant, une
       connexion est créé entre le nœud source `i' et le nœud destination `j'.
          i j
         ----
       i| 0 i
       j| 0 0
    -->
  <string>
  1 1 0 1 1 1 1
  0 0 0 0 1 1 1
  0 0 0 0 0 1 1
  0 0 0 0 0 0 1
  0 0 0 0 0 0 0
  0 0 1 0 1 0 0
  0 0 0 1 0 0 0
  </string>
 </key>
 <key name="classes">
  <!-- pour chaque nœud. on assigne le nom d'une classe. -->
  <string>
   class1 class2 class3 class4 class5 class6 class7
  </string>
 </key>
 <key name="port">
   <!-- les types de connexions :
   - in-out : ajoute un port de sortie `out' pour le modèle source et un port
              d'entrée `in' pour le modèle destination.
 
   - in : ajoute un port de sortie avec le même nom que le modèle de
          destination et un port d'entrée `in' pour le modèle destination.
 
   - out : ajoute un port de sortie `out' pour le modèle source et un port
           d'entrée du même nom que le modèle source pour le modèle destination.
 
   - other : ajoute un port de sortie avec le même nom que le modèle
             destination au modèle source et un port du même nom que le modèle
             source pour le modèle destination.
   -->
  <string>
   in-out|in|out|other
  </string>
 </key>
</map>

Le constructeur de graphe peut être directement utilisé dans un modèle Exécutif et paramétré via une condition expérimentales ou directement depuis les bibliothèques de développements VFL. Par exemple, pour créer un modèle qui, à l'initialisation, crée un graphe de 7 nœuds tous reliés à un même nœud :

#include <vle/devs/Executive.hpp>
#include <vle/devs/ExecutiveDbg.hpp>
#include <vle/translator/GraphTranslator.hpp>
#include <vle/value/Map.hpp>
 
using namespace vle;
 
namespace example {
 
class ExecutiveGraph : public devs::Executive
{
public:
    ExecutiveGraph(const devs::ExecutiveInit& mdl,
		   const devs::InitEventList& events)
        : devs::Executive(mdl, events)
    {}
 
    virtual ~GenExecutiveGraph()
    {}
 
    virtual devs::Time init(const devs::Time& /* time */)
    {
        translator::GraphTranslator tr(*this);
 
        value::Map mp;
        mp.addString("prefix", "node");
        mp.addInt("number", 6);
        mp.addString("port", "in-out");
        mp.addString("adjacency matrix",
                     " 0 0 0 0 0 1"
                     " 0 0 1 0 0 1"
                     " 0 1 0 0 0 1"
                     " 0 0 0 1 0 1"
                     " 0 0 0 1 0 1"
                     " 0 0 0 0 0 0");
        mp.addString("classes", "beepbeep beepbeepbeep beepbeep beepbeepbeep "
                     "beepbeep counter");
 
        tr.translate(mp);
 
        return devs::Time::infinity;
    }
};
 
} // namespace example
 
DECLARE_NAMED_EXECUTIVE_DBG(exegraph, example::ExecutiveGraph)


This page was last modified on 4 May 2010, at 05:43. This page has been accessed 473 times.