2016-01-11 1 views
0

Je suis nouveau sur scheme/guile. Je voudrais filtrer un tableau de C struct dans un programme C en utilisant le script scm d'un utilisateur. Quelque chose comme:Filtrage des structures C avec GNU guile

struct Date { 
    int year; 
    int month; 
    int day; 
    }; 

struct Person { 
    char name[20]; 
    Date birth; 
    Date death; 
    }; 

void printPersons(Person* persons, size_t n_persons, const char* scm_file) { 
    size_t i; 

    /* (...) compile script */ 

    for(i=0; i< n_persons;++i) 
     { 
     int accept = /** call guile script with &persons[i] */ 
     if(accept) printf("%s\n",persons[i].name); 
     } 
    /* dispose script */ 
    } 

Pour l'instant je suis perdu dans le manuel. Où devrais-je commencer? Merci.

Répondre

1

Pour appeler un script de schéma dans un programme C pour évaluation avec guile, vous devez utiliser scm_with_guile(). La fonction exécutée par scm_with_guile() doit ensuite appeler quelque chose comme scm_c_eval_string() (pour évaluer une chaîne dans la syntaxe du schéma) ou scm_c_primitive_load() (pour évaluer un fichier dans la syntaxe du schéma). De telles chaînes et fichiers peuvent eux-mêmes appeler les procédures de chargement de guile et de module d'utilisation en utilisant la syntaxe de schéma normal. Si vous utilisez C++, cela peut vous donner quelques idées: c++-gtk-utils/extension et extension source code. En ce qui concerne votre code particulier, vous pouvez initialiser votre variable 'accept' avec la valeur de retour de Cgu :: Extension :: exec_shared() appelée avec un traducteur Cgu :: Extension :: integer_to_long(), mais puisque 'accept' est de type int, sur un système 64 bits, vous devez autoriser un débordement long à int. Vous devez également déstructurer votre structure de personne en valeurs individuelles pour le script.