glib-genmarshal

glib-genmarshal — Утилита генерирующая C код маршаллера для GLib замыканий

Краткое описание

glib-genmarshal [options...] [files...]

Описание

glib-genmarshal это маленькая утилита которая генерирует C код маршаллеров для callback-функций GClosure механизма в библиотеке GObject входящей в состав GLib. Функции маршаллеры имеют стандартную сигнатуру, их помещают в вызов замыкания, массив структур значений содержит параметры callback-функций и структуру значения для возвращаемого значения callback-функции. Маршаллер отвечает за вызов соответствующего функционального C кода замыкания, со всеми параметрами в стеке, и накапливает возвращаемые значения.

Invocation

glib-genmarshal принимает список маршаллеров для генерации ввода. Список маршаллеров читается либо из стандартного ввода либо из файлов помещаемых как дополнительный аргумент в командной строке.

Опции

--header

Генерировать содержимое заголовочного файла маршаллера.

--body

Генерировать C код файла содержащего маршаллер.

--prefix=string, --prefix string

Определить префикс маршаллера. По умолчанию префикс `g_cclosure_marshal'.

--skip-source

Пропустить исходное расположение замечаний в генерируемых комментариях.

--nostdinc

Не использовать стандартный маршаллер библиотеки GObject, и пропустить включённые директивы gmarshal.h в генерируемом заголовочном файле.

--g-fatal-warnings

Сделать предупреждения фатальными, то есть немедленно выходить из программы если получено предупреждение.

-h, --help

Напечатать краткое описание и выйти.

-v, --version

Напечатать версию и выйти.


Формат списка маршаллеров

Списки маршаллеров обрабатываются построчно, строка может содержать комментарий в форме

# это комментарий

или спецификацию маршаллера в форме

RTYPE:PTYPE RTYPE:PTYPE,PTYPE RTYPE:PTYPE,PTYPE,PTYPE

(может присутствовать до 16 PTYPE).

RTYPE часть определяет возвращаемый тип callback-функции, а PTYPE отделённый справа двоеточием список параметров callback-функции, за исключением первого и последнего параметра которые всегда являются указателями.


Типовые параметры

В настоящее время поддерживаются следующие типы:

VOID

указывает что нет возвращаемого типа, или что отсутствуют дополнительные параметры. Если 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

устаревший псевдоним для VOID

BOOL

устаревший псевдоним для BOOLEAN

Пример

Генерация маршаллеров для следующих 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-mkenums(1)

Ошибки

Нет известных ошибок.

Автор

glib-genmarshal был написан Tim Janik .

Эту страницу руководства написал Tim Janik .