IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

[Débutant] C/OCaml XML + graphe


Sujet :

Caml

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 22
    Points : 13
    Points
    13
    Par défaut [Débutant] C/OCaml XML + graphe
    Bonjour,
    Dans l'optique de créer un graphe, je dois mixer OCaml et C.
    Je cherche comment faire pour atteindre ce résultat (qui apparemment "n'est pas compliqué", mais comme je l'ai mis dans le titre je suis encore moins bon qu'un débutant donc ça l'est !).

    J'ai un fichier XML qui regroupe les données des points (en C) à créer et relier (C & Ocaml) avec le type suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /* Structs */
    /* Point */
    typedef struct point {
        xmlChar *id;
        xmlChar *name;
        xmlChar *x;
        xmlChar *y;
        xmlChar *description;
    } point, *pointPtr;
                                                                                                                                           /* Points */
    typedef struct Points {
      int nbPoints;
      pointPtr points[MAX_POINTS];
    } Points, *PointsPtr;
    Ma question est la suivante, comment procéder et par où débuter pour créer un tel graphe ?

    Merci pour l'aide par avance

  2. #2
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Bonjour,
    je n'ai pas compris exactement où tu bloquais. S'il s'agit de lier des bibliothèques statiques écrites en C à un programme OCaml, je peux t'aider. S'il s'agit de l'utilisation de graphe en OCaml, il va falloir être plus spécifique.

    Cdlt,
    -- Yankel Scialom

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Je veux m'appuyer sur la structure donnée pour la traduire en graphe, à chaque élément je souhaite rajouter un point sur le graphe (le modéliser) et faire ces ajouts en Caml sachant que le code principal est en C.
    Pour cette deuxième partie, si j'ai bien compris je dois initialiser en Caml et faire la fonction d'appel en C, mais la première je ne sais pas du tout comment procéder...
    Je ne sais pas si j'ai été plus clair.

  4. #4
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Citation Envoyé par Yyukk Voir le message
    Je ne sais pas si j'ai été plus clair.
    Un peu, mais pas des masses. Mais je fatigue peut être tout simplement (il est ~2h chez moi).

    Si j'ai bien compris, tu aimerais pouvoir modifier la représentation des données du graphe via des fonctions écrites en Caml. Mais tu ne sais pas encore comment représenter ces données ? Ce qui me chagrine, c'est que tu parles de graphe, tu nous montres ta belle structure représentant les nœuds, mais rien des arcs.

    En fait, plus je creuse, plus je me rends compte que je n'ai vraiment pas compris ton problème. Peut être pourrais-tu prendre le temps de faire un long post pour tout nous dire, que l'on ait une vue d'ensemble. À partir de là, nous pourrions commencer à y voir plus clair et à t'aider.

    À défaut, pose des questions technique plus concises.
    Cdlt,
    -- Yankel Scialom

  5. #5
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour,

    Voici la marche à suivre :


    • Définir les types du côté du C (déjà fait) et du côté d'OCaml.
    • Écrire les fonctions OCaml du genre val foo : point -> unit.
    • Les enregistrer avec Callback.register id foo.
    • Du côté du C, récupérer la fonction avec f=*(caml_named_value(id))
    • L'utiliser avec callback(f, arg).

    Le code C devra inclure les en-tête caml/mlvalues.h, caml/callback.h, caml/memory.h, etc. selon les besoins.

    Cordialement,
    Cacophrène

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Cacophrene Voir le message
    • Les enregistrer avec Callback.register id foo.
    • Du côté du C, récupérer la fonction avec f=*(caml_named_value(id))
    • L'utiliser avec callback(f, arg).

    Le code C devra inclure les en-tête caml/mlvalues.h, caml/callback.h, caml/memory.h, etc. selon les besoins.
    Merci pour ces points là, ça me confirme ce que j'avais compris sur mes lectures.
    Il me reste plus qu'à trouver comment procéder pour les 2 premiers que tu as mis à savoir :
    • Définir les types du côté du C (déjà fait) et du côté d'OCaml.
    • Écrire les fonctions OCaml du genre val foo : point -> unit.


    @prgasp77 : Effectivement il y a la structure sans celle des arcs... j'aimerai juste créer le graphe en utilisant la structure mise. C'est à dire faire un code qui va créer les points et les relier dans l'ordre émit. Mais faire ce code en Ocaml, je ne sais pas comment détailler sur un sujet que je ne maîtrise pas du tout

  7. #7
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour,

    OK pour les 3 derniers points de ma liste. Pour les deux premiers, par exemple, pour la définition du type point du côté d'OCaml, tu peux partir d'un simple record qui ressemble beaucoup au code C :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    type xmlchar = (* à expliciter *)
    type point = {
      id : xmlchar;
      name : xmlchar;
      x : xmlchar;
      y : xmlchar;
      description : xmlchar }
    Deux remarques : si tous les champs doivent être modifiables, il vaut peut-être mieux les définir avec le mot-clef mutable. Du côté d'OCaml, la fonction foo sera également assez facile à écrire.

    La seule « vraie » difficulté réside dans l'appel de la fonction foo par le code C. En effet, dans le monde OCaml, cette fonction reçoit en entrée un argument de type point. Dans le monde C, c'est donc un argument de type value. Il te faut donc convertir ta structure point à la sauce C en un type value pour la rendre manipulable par OCaml.

    De même, la valeur renvoyée par la fonction foo sera éventuellement de type value. Si c'est le cas, pour la réutiliser ultérieurement dans le code C, il te faut donc aussi une fonction qui la convertisse en structure point à la sauce C.

    Suivant le type choisi, ces conversions sont plus ou moins immédiates (tu te doutes qu'un type élaboré demandera plus de travail qu'un type plus simple...).

    Cordialement,
    Cacophrène

  8. #8
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Et bien sûr, il te faudra lire La Sainte Documentation. Prends bien le temps de saisir le principe, il y a beaucoup de détails qui peuvent sembler anodin à première vue, mais qui ignorés te mèneront à des segfault étranges.
    -- Yankel Scialom

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Merci pour l'aide apporté, je vais m'y attarder un peu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ Tomcat ] [ débutant ] config web.xml
    Par TeTram dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 09/02/2009, 10h22
  2. [Choix] [Débutant] SOAP ou XML-RPC ?
    Par Noisette dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 15/01/2009, 17h31
  3. [jCharts] [débutant] rafraîchissement d'un graphe
    Par calogerogigante dans le forum 2D
    Réponses: 2
    Dernier message: 23/09/2005, 09h29
  4. [débutant] interet de XML
    Par unNew dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 09/09/2005, 09h48
  5. [débutant] faire du xml...
    Par Mathusalem dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 24/03/2005, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo