Фильтрация структур C с хитростью GNU

Я новичок в схемах/обманах. Я хотел бы отфильтровать массив структур C внутри программы C, используя пользовательский скрипт scm. Что-то типа:

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 */
    } 

Пока что я потерялся в руководстве. С чего мне начать? Спасибо.


person Pierre    schedule 11.01.2016    source источник


Ответы (1)


Чтобы вызвать сценарий схемы в программе на C для оценки хитростью, вам нужно использовать scm_with_guile(). Функция, выполняемая scm_with_guile(), затем должна вызывать что-то вроде scm_c_eval_string() (для оценки строки в синтаксисе схемы) или scm_c_primitive_load() (для оценки файла в синтаксисе схемы). Такие строки и файлы сами могут вызывать процедуры guile load и use-modules с использованием обычного синтаксиса схемы.

Если вы используете C++, это может дать вам некоторые идеи: c++-gtk- utils/extension и исходный код расширения. Что касается вашего конкретного кода, вы можете инициализировать свою переменную accept с возвращаемым значением Cgu::Extension::exec_shared(), вызываемым транслятором Cgu::Extension::integer_to_long(), но поскольку "accept" int, в 64-битной системе вам нужно разрешить переполнение long to int. Вам также нужно будет деструктурировать структуру вашего человека на отдельные значения для скрипта.

person Chris Vine    schedule 11.01.2016