Справочное описание GObject |
---|
glib-genmarshalglib-genmarshal — Утилита генерирующая C код маршаллера для GLib замыканий |
glib-genmarshal
[options...] [files...]
glib-genmarshal это маленькая утилита которая генерирует C код маршаллеров для callback-функций GClosure механизма в библиотеке GObject входящей в состав GLib. Функции маршаллеры имеют стандартную сигнатуру, их помещают в вызов замыкания, массив структур значений содержит параметры callback-функций и структуру значения для возвращаемого значения callback-функции. Маршаллер отвечает за вызов соответствующего функционального C кода замыкания, со всеми параметрами в стеке, и накапливает возвращаемые значения.
glib-genmarshal принимает список маршаллеров для генерации ввода. Список маршаллеров читается либо из стандартного ввода либо из файлов помещаемых как дополнительный аргумент в командной строке.
--header |
Генерировать содержимое заголовочного файла маршаллера. |
--body |
Генерировать C код файла содержащего маршаллер. |
--prefix=string , --prefix string |
Определить префикс маршаллера. По умолчанию префикс |
--skip-source |
Пропустить исходное расположение замечаний в генерируемых комментариях. |
--nostdinc |
Не использовать стандартный маршаллер библиотеки GObject, и пропустить включённые директивы
|
--g-fatal-warnings |
Сделать предупреждения фатальными, то есть немедленно выходить из программы если получено предупреждение. |
-h , --help |
Напечатать краткое описание и выйти. |
-v , --version |
Напечатать версию и выйти. |
Списки маршаллеров обрабатываются построчно, строка может содержать комментарий в форме
# это комментарий
или спецификацию маршаллера в форме
RTYPE
:PTYPE
RTYPE
:PTYPE
,PTYPE
RTYPE
:PTYPE
,PTYPE
,PTYPE
(может присутствовать до 16 PTYPE
).
RTYPE
часть определяет возвращаемый тип callback-функции,
а PTYPE
отделённый справа двоеточием список параметров callback-функции,
за исключением первого и последнего параметра которые всегда являются указателями.
В настоящее время поддерживаются следующие типы:
VOID |
указывает что нет возвращаемого типа, или что отсутствуют дополнительные параметры.
Если |
BOOLEAN |
для логических типов (gboolean) |
CHAR |
для символьного типа со знаком (gchar) |
UCHAR |
для типа unsigned char (guchar) |
INT |
для типа signed integer (gint) |
UINT |
для типа unsigned integer (guint) |
LONG |
для типа signed long integer (glong) |
ULONG |
для типа unsigned long integer (gulong) |
INT64 |
для типа signed 64bit integer (gint64) |
UINT64 |
для типа unsigned 64bit integer (guint64) |
ENUM |
для перечислимого типа (gint) |
FLAGS |
для типа flag enumeration (guint) |
FLOAT |
для типа single-precision float (gfloat) |
DOUBLE |
для типа double-precision float (gdouble) |
STRING |
для строкового типа (gchar*) |
BOXED |
для типа boxed (анонимный но с подсчётом ссылок) (GBoxed*) |
PARAM |
для типа GParamSpec или производного (GParamSpec*) |
POINTER |
для типа anonymous pointer (gpointer) |
OBJECT |
для типа GObject или производного (GObject*) |
NONE |
устаревший псевдоним для |
BOOL |
устаревший псевдоним для |
Генерация маршаллеров для следующих callback-функций:
void foo (gpointer data1,
gpointer data2);
void bar (gpointer data1,
gint param1,
gpointer data2);
gfloat baz (gpointer data1,
gboolean param1,
guchar param2,
gpointer data2);
Список маршаллеров будет выглядеть так:
VOID:VOID
VOID:INT
FLOAT:BOOLEAN,UCHAR
Генерируемые маршаллеры имеют параметры закодированные в имени их функции. Для этого специфичного списка они будут
g_cclosure_marshal_VOID__VOID(),
g_cclosure_marshal_VOID__INT(),
g_cclosure_marshal_FLOAT__BOOLEAN_UCHAR().
Они могут использоваться непосредственно для GClosures или будут помещены как GSignalCMarshaller c_marshaller параметр; после создания сигналов:
GClosure *cc_foo, *cc_bar, *cc_baz;
cc_foo = g_cclosure_new (NULL, foo, NULL);
g_closure_set_marshal (cc_foo, g_cclosure_marshal_VOID__VOID);
cc_bar = g_cclosure_new (NULL, bar, NULL);
g_closure_set_marshal (cc_bar, g_cclosure_marshal_VOID__INT);
cc_baz = g_cclosure_new (NULL, baz, NULL);
g_closure_set_marshal (cc_baz, g_cclosure_marshal_FLOAT__BOOLEAN_UCHAR);
glib-genmarshal был написан Tim Janik
<timj@gtk.org>
.
Эту страницу руководства написал Tim Janik <timj@gtk.org>
.