Справочное описание GLib | ||||
---|---|---|---|---|
#include <glib.h>
GHookList;
void (*GHookFinalizeFunc) (GHookList *hook_list,
GHook *hook);
GHook;
void (*GHookFunc) (gpointer data);
gboolean (*GHookCheckFunc) (gpointer data);
void g_hook_list_init (GHookList *hook_list,
guint hook_size);
void g_hook_list_invoke (GHookList *hook_list,
gboolean may_recurse);
void g_hook_list_invoke_check (GHookList *hook_list,
gboolean may_recurse);
void g_hook_list_marshal (GHookList *hook_list,
gboolean may_recurse,
GHookMarshaller marshaller,
gpointer marshal_data);
void (*GHookMarshaller) (GHook *hook,
gpointer marshal_data);
void g_hook_list_marshal_check (GHookList *hook_list,
gboolean may_recurse,
GHookCheckMarshaller marshaller,
gpointer marshal_data);
gboolean (*GHookCheckMarshaller) (GHook *hook,
gpointer marshal_data);
void g_hook_list_clear (GHookList *hook_list);
GHook* g_hook_alloc (GHookList *hook_list);
#define g_hook_append ( hook_list, hook )
void g_hook_prepend (GHookList *hook_list,
GHook *hook);
void g_hook_insert_before (GHookList *hook_list,
GHook *sibling,
GHook *hook);
void g_hook_insert_sorted (GHookList *hook_list,
GHook *hook,
GHookCompareFunc func);
gint (*GHookCompareFunc) (GHook *new_hook,
GHook *sibling);
gint g_hook_compare_ids (GHook *new_hook,
GHook *sibling);
GHook* g_hook_get (GHookList *hook_list,
gulong hook_id);
GHook* g_hook_find (GHookList *hook_list,
gboolean need_valids,
GHookFindFunc func,
gpointer data);
gboolean (*GHookFindFunc) (GHook *hook,
gpointer data);
GHook* g_hook_find_data (GHookList *hook_list,
gboolean need_valids,
gpointer data);
GHook* g_hook_find_func (GHookList *hook_list,
gboolean need_valids,
gpointer func);
GHook* g_hook_find_func_data (GHookList *hook_list,
gboolean need_valids,
gpointer func,
gpointer data);
GHook* g_hook_first_valid (GHookList *hook_list,
gboolean may_be_in_call);
GHook* g_hook_next_valid (GHookList *hook_list,
GHook *hook,
gboolean may_be_in_call);
enum GHookFlagMask;
#define G_HOOK_FLAGS (hook)
#define G_HOOK_FLAG_USER_SHIFT
#define G_HOOK (hook)
#define G_HOOK_IS_VALID (hook)
#define G_HOOK_ACTIVE (hook)
#define G_HOOK_IN_CALL (hook)
#define G_HOOK_IS_UNLINKED (hook)
GHook* g_hook_ref (GHookList *hook_list,
GHook *hook);
void g_hook_unref (GHookList *hook_list,
GHook *hook);
void g_hook_free (GHookList *hook_list,
GHook *hook);
gboolean g_hook_destroy (GHookList *hook_list,
gulong hook_id);
void g_hook_destroy_link (GHookList *hook_list,
GHook *hook);
GHookList, GHook и связанные с ними функции обеспечивают поддержку для списков hook-функций. Функции могут быть добавлены и удалены из списков, а список hook-функций может быть вызван.
typedef struct {
gulong seq_id;
guint hook_size : 16;
guint is_setup : 1;
GHook *hooks;
gpointer dummy3;
GHookFinalizeFunc finalize_hook;
gpointer dummy[2];
} GHookList;
Структура GHookList представляет список hook-функций.
gulong seq_id ; |
следующий свободный GHook id. |
guint hook_size : 16; |
размер элементов GHookList, в байтах. |
guint is_setup : 1; |
1 если GHookList была инициализирована. |
GHook *hooks ; |
первый элемент GHook в списке. |
gpointer dummy3 ; |
|
GHookFinalizeFunc finalize_hook ; |
функция вызываемая для завершающего элемента GHook. По умолчанию вызывается разрушающая функция обработчика прерывания. |
gpointer dummy [2]; |
void (*GHookFinalizeFunc) (GHookList *hook_list,
GHook *hook);
Определяет тип функции вызываемой для завершающего прерывания в списке прерываний.
hook_list : |
GHookList. |
hook : |
завершающее прерывание в hook_list .
|
typedef struct {
gpointer data;
GHook *next;
GHook *prev;
guint ref_count;
gulong hook_id;
guint flags;
gpointer func;
GDestroyNotify destroy;
} GHook;
Структура GHook представляет единственную hook-функцию в GHookList.
gpointer data ; |
данные помещаемые в функцию когда вызвано прерывание. |
GHook *next ; |
указатель на следующее прерывание в списке. |
GHook *prev ; |
указатель на предыдущее прерывание в списке. |
guint ref_count ; |
количество ссылок на это прерывание. |
gulong hook_id ; |
id этого прерывания, который уникален внутри этого списка. |
guint flags ; |
флаги устанавливаемые для этого прерывания. Смотрите предопределённые флаги в GHookFlagMask. |
gpointer func ; |
функция вызываемая при возникновении этого прерывания. Возможными сигнатурами для этой функции являются GHookFunc и GHookCheckFunc. |
GDestroyNotify destroy ; |
по умолчанию finalize_hook функция
GHookList вызывает этот элемент прерывания для завершения.
|
void (*GHookFunc) (gpointer data);
Определяет тип hook-функции которую может вызвать g_hook_list_invoke()
.
data : |
поле данных GHook помещаемых в hook-функцию. |
gboolean (*GHookCheckFunc) (gpointer data);
Определяет тип функции которая может быть вызвана g_hook_list_invoke_check()
.
void g_hook_list_init (GHookList *hook_list,
guint hook_size);
Инициализирует GHookList. Должна вызываться после использования GHookList.
void g_hook_list_invoke_check (GHookList *hook_list,
gboolean may_recurse);
Вызывает все GHook функции в GHookList.
Любая функция которая возвращает TRUE
удаляется из
GHookList.
void g_hook_list_marshal (GHookList *hook_list,
gboolean may_recurse,
GHookMarshaller marshaller,
gpointer marshal_data);
Вызывает функцию в каждом допустимом GHook.
void (*GHookMarshaller) (GHook *hook,
gpointer marshal_data);
Определяет тип функции используемой в g_hook_list_marshal()
.
hook : |
GHook. |
marshal_data : |
пользовательские данные. |
void g_hook_list_marshal_check (GHookList *hook_list,
gboolean may_recurse,
GHookCheckMarshaller marshaller,
gpointer marshal_data);
Вызывает функцию для каждого допустимого GHook и уничтожает его если
функция возвращает FALSE
.
gboolean (*GHookCheckMarshaller) (GHook *hook,
gpointer marshal_data);
Определяет тип функции используемой в g_hook_list_marshal_check()
.
void g_hook_list_clear (GHookList *hook_list);
Удаляет все GHook элементы из GHookList.
hook_list : |
GHookList. |
GHook* g_hook_alloc (GHookList *hook_list);
Распределяет место для GHook и инициализирует его.
void g_hook_insert_before (GHookList *hook_list,
GHook *sibling,
GHook *hook);
void g_hook_insert_sorted (GHookList *hook_list,
GHook *hook,
GHookCompareFunc func);
gint (*GHookCompareFunc) (GHook *new_hook,
GHook *sibling);
Определяет тип функции используемой для сравнения GHook элементов в
g_hook_insert_sorted()
.
gint g_hook_compare_ids (GHook *new_hook,
GHook *sibling);
Сравнивает ids двух GHook элементов, возвращает отрицательное значение если второй id больше первого.
GHook* g_hook_get (GHookList *hook_list,
gulong hook_id);
Возвращает GHook с полученным id, или NULL
если он не найден.
GHook* g_hook_find (GHookList *hook_list,
gboolean need_valids,
GHookFindFunc func,
gpointer data);
Ищет GHook в GHookList используя функцию для проверочного сравнения.
hook_list : |
GHookList. |
need_valids : |
TRUE если GHook которые были разрушены должны быть пропущены.
|
func : |
функция вызываемая для каждого GHook, которая должна возвращать
TRUE когда
GHook найден.
|
data : |
данные помещаемые в func .
|
Возвращает : | найденый GHook или
NULL если соответствующий
GHook не найден.
|
gboolean (*GHookFindFunc) (GHook *hook,
gpointer data);
Определяет тип функции помещаемой в g_hook_find()
.
hook : |
GHook. |
data : |
пользовательские данные помещаемые в g_hook_find_func() .
|
Возвращает : |
TRUE если требуемый GHook был найден.
|
GHook* g_hook_find_data (GHookList *hook_list,
gboolean need_valids,
gpointer data);
GHook* g_hook_find_func (GHookList *hook_list,
gboolean need_valids,
gpointer func);
GHook* g_hook_find_func_data (GHookList *hook_list,
gboolean need_valids,
gpointer func,
gpointer data);
GHook* g_hook_first_valid (GHookList *hook_list,
gboolean may_be_in_call);
Возвращает первый GHook в
GHookList который небыл разрушен.
Количество ссылок для GHook увеличивается, поэтому вы должны вызвать
g_hook_unref()
для его восстановления когда он больше не нужен.
(Или вызвать g_hook_next_valid()
если вы двигаетесь
через GHookList.)
GHook* g_hook_next_valid (GHookList *hook_list,
GHook *hook,
gboolean may_be_in_call);
Возвращает следующий GHook в GHookList который небыл разрушен.
Количество ссылок для GHook уменьшается, поэтому вы должны вызвать
g_hook_unref()
для восстановления когда он больше не нужен.
(Или вызывать g_hook_next_valid()
пока не вернётся NULL
.)
typedef enum
{
G_HOOK_FLAG_ACTIVE = 1 << 0,
G_HOOK_FLAG_IN_CALL = 1 << 1,
G_HOOK_FLAG_MASK = 0x0f
} GHookFlagMask;
Флаги используемые внутренней реализацией GHook.
#define G_HOOK_FLAGS(hook) (G_HOOK (hook)->flags)
Возвращает флаги hook.
hook : |
GHook. |
#define G_HOOK_FLAG_USER_SHIFT (4)
Позиция первого бита который не зарезервирован для внутреннего использования реализацией
GHook, то есть
1 << G_HOOK_FLAG_USER_SHIFT
это первый бит который
может использоваться для определённых приложением флагов.
#define G_HOOK_IS_VALID(hook)
Возвращает TRUE
если GHook допустим,
то есть он в GHookList, он активен и он был разрушен.
#define G_HOOK_ACTIVE(hook)
Возвращает TRUE
если GHook активен, который обычно TRUE
пока GHook разрушен.
#define G_HOOK_IN_CALL(hook)
Возвращает TRUE
если
GHook функция в текущий момент выполняется.
GHook* g_hook_ref (GHookList *hook_list,
GHook *hook);
Увеличивает количество ссылок для GHook.
void g_hook_unref (GHookList *hook_list,
GHook *hook);
Уменьшает количество ссылок GHook.
Если количество ссылок равно 0, GHook удаляется из
GHookList
и вызывается g_hook_free()
для его освобождения.
void g_hook_free (GHookList *hook_list,
GHook *hook);
Вызывает GHookList
hook_free
функцию если она существует и освобождает память
распределённую для GHook.
gboolean g_hook_destroy (GHookList *hook_list,
gulong hook_id);
Разрушает GHook, получая его ID.