| |
![]() |
![]() |
![]() |
![]() |
Справочное описание 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.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |