【GLib】GLib学习笔记(三):gtypes、garray、gerror、goption
1、類型:glib/gtypes.h
1.1 基本類型;
typedef char gchar;
typedef short gshort;
typedef long glong;
typedef int gint;
typedef gint gboolean;typedef unsigned char guchar;
typedef unsigned short gushort;
typedef unsigned long gulong;
typedef unsigned int guint;typedef float gfloat;
typedef double gdouble;typedef void* gpointer;
typedef const void *gconstpointer; /指向的對象不可修改,但可以指向其它對象
1.2 最大最小值定義
#define G_MININT8 ((gint8) -0x80)
#define G_MAXINT8 ((gint8) 0x7f)
#define G_MAXUINT8 ((guint8) 0xff)#define G_MININT16 ((gint16) -0x8000)
#define G_MAXINT16 ((gint16) 0x7fff)
#define G_MAXUINT16 ((guint16) 0xffff)#define G_MININT32 ((gint32) -0x80000000)
#define G_MAXINT32 ((gint32) 0x7fffffff)
#define G_MAXUINT32 ((guint32) 0xffffffff)#define G_MININT64 ((gint64) G_GINT64_CONSTANT(-0x8000000000000000))
#define G_MAXINT64 G_GINT64_CONSTANT(0x7fffffffffffffff)
#define G_MAXUINT64 G_GUINT64_CONSTANT(0xffffffffffffffff)
1.3 大小端交換,位移操作
#define GUINT16_SWAP_LE_BE_CONSTANT(val) ((guint16) ( \(guint16) ((guint16) (val) >> 8) | \(guint16) ((guint16) (val) << 8)))#define GUINT32_SWAP_LE_BE_CONSTANT(val) ((guint32) ( \(((guint32) (val) & (guint32) 0x000000ffU) << 24) | \(((guint32) (val) & (guint32) 0x0000ff00U) << 8) | \(((guint32) (val) & (guint32) 0x00ff0000U) >> 8) | \(((guint32) (val) & (guint32) 0xff000000U) >> 24)))#define GUINT64_SWAP_LE_BE_CONSTANT(val) ((guint64) ( \(((guint64) (val) & \(guint64) G_GINT64_CONSTANT (0x00000000000000ffU)) << 56) | \(((guint64) (val) & \(guint64) G_GINT64_CONSTANT (0x000000000000ff00U)) << 40) | \(((guint64) (val) & \(guint64) G_GINT64_CONSTANT (0x0000000000ff0000U)) << 24) | \(((guint64) (val) & \(guint64) G_GINT64_CONSTANT (0x00000000ff000000U)) << 8) | \(((guint64) (val) & \(guint64) G_GINT64_CONSTANT (0x000000ff00000000U)) >> 8) | \(((guint64) (val) & \(guint64) G_GINT64_CONSTANT (0x0000ff0000000000U)) >> 24) | \(((guint64) (val) & \(guint64) G_GINT64_CONSTANT (0x00ff000000000000U)) >> 40) | \(((guint64) (val) & \(guint64) G_GINT64_CONSTANT (0xff00000000000000U)) >> 56)))
2、數組:glib/garray.h
2.1 GArray 可調整大小的數組。
原型:
typedef struct _GArray GArray;
struct _GArray{gchar *data;guint len;
};
常用接口:
新建:g_array_new
釋放:g_array_free
添加:g_array_append_vals、g_array_prepend_vals
刪除:g_array_remove_index、g_array_remove_index_fast、g_array_remove_range
插入:g_array_insert_vals
排序:g_array_sort
搜索:g_array_binary_search
2.2 GByteArray 字節數組,guint8的數組。繼承自GArray,但類型安全
原型:
typedef struct _GByteArray GByteArray;
struct _GByteArray{guint8 *data;guint len;
};
常用接口:
新建:g_byte_array_new
清空:g_byte_array_free
添加:g_byte_array_append、g_byte_array_prepend
刪除:g_byte_array_remove_index、g_byte_array_remove_index_fast、g_byte_array_remove_range
排序:g_byte_array_sort
2.3 GPtrArray 可調整大小的指針數組
原型:
typedef struct _GPtrArray GPtrArray;
struct _GPtrArray{gpointer *pdata;guint len;
};
常用接口:
新建:g_ptr_array_new()
釋放:g_ptr_array_free()
添加:use g_ptr_array_add()
刪除:use g_ptr_array_remove()、g_ptr_array_remove_index()、g_ptr_array_remove_index_fast()
獲取:g_ptr_array_index()
重置:g_ptr_array_set_size()
2.4 GBytes 一種簡單的參考計數數據類型,里面的數據內容不可修改
原型:
struct _GBytes{gconstpointer data; /* may be NULL iff (size == 0) */gsize size; /* may be 0 */gatomicrefcount ref_count;GDestroyNotify free_func;gpointer user_data;
};
一種簡單的參考計數數據類型,里面的數據內容不可修改。
使用#GBytes的目的是,只要有人持有對字節的引用,它所持有的內存區域就會一直保持活動狀態。
當最后一個引用計數被刪除時,內存被釋放。
多個不相關的調用者可以在不協調其活動的情況下使用#GBytes中的字節數據,常量指針確保在它們持有引用時字節數據不會改變或移動。
#GBytes可以來自許多不同的源,這些源可能具有不同的釋放內存區域的過程。
例如來自g_malloc()的內存、來自內存片、來自#GMappedFile的內存或來自其他分配器的內存。
#GBytes可以作為#GHashTable中的鍵。使用g_bytes_equal()和g_bytes_hash()作為g_hash_table_new()或g_hash_table_new_full()的參數。
通過將g_bytes_compare()函數傳遞給g_tree_new(), #GBytes還可以用作#GTree中的鍵。
這個字節所指向的數據不能被修改。有關可變字節數組,請參閱#GByteArray。
使用g_bytes_unref_to_array()為#GBytes序列創建可變數組。
要從可變的#GByteArray創建不可變的#GBytes,使用g_byte_array_free_to_bytes()函數。
3、錯誤:glib/gerror.h
GError
原型:
typedef struct _GError GError;
struct _GError{GQuark domain;gint code;gchar *message;
};
常用接口:
新建:g_error_new
釋放:g_error_free
清理:g_clear_error
復制:g_error_copy
設置:g_set_error
4、命令行解析器:glib/goption.h
4.1 GOptionContext 選項上下文
一個“GOptionContext”結構定義了命令行選項解析器接受哪些選項。該結構只有私有字段,不應該直接訪問。
常用接口:
新建:g_option_context_new
釋放:g_option_context_free
解析:g_option_context_parse
添加group:g_option_context_add_group
新建group并添加:g_option_context_add_main_entries
4.2 GOptionGroup 代表一組選項
“GOptionGroup”結構體定義單個組中的選項。該結構只有私有字段,不應該直接訪問。
組中的所有選項共享相同的翻譯功能。
需要解析命令行選項的庫應該提供一個函數來獲取一個保存選項的“GOptionGroup”,然后應用程序可以將其添加到#GOptionContext中。
常用接口:
新建:g_option_group_new
釋放:g_option_group_free
添加條目:g_option_group_add_entries
增加引用計數:g_option_group_ref
減少引用計數:g_option_group_unref
設置鉤子函數:g_option_group_set_parse_hooks 將兩個函數與@group關聯起來,這兩個函數將從g_option_context_parse()中調用,分別在解析第一個選項之前和最后一個選項之后調用。注意,可以在使用g_option_group_new()構造組時指定要傳遞給@pre_parse_func和@post_parse_func的用戶數據。
設置錯誤處理:g_option_group_set_error_hook
4.3 GOptionEntry 代表一條選項
typedef struct _GOptionEntry GOptionEntry;
struct _GOptionEntry
{const gchar *long_name; // --long_namegchar short_name; // -short_namegint flags; // GOptionFlagsGOptionArg arg; // 參數類型gpointer arg_data; // 存取參數的指針const gchar *description; // --help打印信息const gchar *arg_description; // --help打印信息額外參數
};
常用函數:
新建group并添加選項:g_option_context_add_main_entries
向group中添加選項:g_option_group_add_entries
總結
以上是生活随笔為你收集整理的【GLib】GLib学习笔记(三):gtypes、garray、gerror、goption的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【GLib】GLib学习笔记(二):源码
- 下一篇: 【摄像头】摄像头相关名词解释