【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; 	/指向的對(duì)象不可修改,但可以指向其它對(duì)象
 
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、數(shù)組:glib/garray.h
2.1 GArray 可調(diào)整大小的數(shù)組。
原型:
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 字節(jié)數(shù)組,guint8的數(shù)組。繼承自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 可調(diào)整大小的指針數(shù)組
原型:
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 一種簡(jiǎn)單的參考計(jì)數(shù)數(shù)據(jù)類型,里面的數(shù)據(jù)內(nèi)容不可修改
原型:
struct _GBytes{gconstpointer data;  /* may be NULL iff (size == 0) */gsize size;  /* may be 0 */gatomicrefcount ref_count;GDestroyNotify free_func;gpointer user_data;
};
 
一種簡(jiǎn)單的參考計(jì)數(shù)數(shù)據(jù)類型,里面的數(shù)據(jù)內(nèi)容不可修改。
使用#GBytes的目的是,只要有人持有對(duì)字節(jié)的引用,它所持有的內(nèi)存區(qū)域就會(huì)一直保持活動(dòng)狀態(tài)。
 當(dāng)最后一個(gè)引用計(jì)數(shù)被刪除時(shí),內(nèi)存被釋放。
 多個(gè)不相關(guān)的調(diào)用者可以在不協(xié)調(diào)其活動(dòng)的情況下使用#GBytes中的字節(jié)數(shù)據(jù),常量指針確保在它們持有引用時(shí)字節(jié)數(shù)據(jù)不會(huì)改變或移動(dòng)。
#GBytes可以來自許多不同的源,這些源可能具有不同的釋放內(nèi)存區(qū)域的過程。
 例如來自g_malloc()的內(nèi)存、來自內(nèi)存片、來自#GMappedFile的內(nèi)存或來自其他分配器的內(nèi)存。
#GBytes可以作為#GHashTable中的鍵。使用g_bytes_equal()和g_bytes_hash()作為g_hash_table_new()或g_hash_table_new_full()的參數(shù)。
 通過將g_bytes_compare()函數(shù)傳遞給g_tree_new(), #GBytes還可以用作#GTree中的鍵。
這個(gè)字節(jié)所指向的數(shù)據(jù)不能被修改。有關(guān)可變字節(jié)數(shù)組,請(qǐng)參閱#GByteArray。
 使用g_bytes_unref_to_array()為#GBytes序列創(chuàng)建可變數(shù)組。
 要從可變的#GByteArray創(chuàng)建不可變的#GBytes,使用g_byte_array_free_to_bytes()函數(shù)。
3、錯(cuò)誤: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
復(fù)制:g_error_copy
設(shè)置:g_set_error
 
4、命令行解析器:glib/goption.h
4.1 GOptionContext 選項(xiàng)上下文
一個(gè)“GOptionContext”結(jié)構(gòu)定義了命令行選項(xiàng)解析器接受哪些選項(xiàng)。該結(jié)構(gòu)只有私有字段,不應(yīng)該直接訪問。
 常用接口:
新建: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 代表一組選項(xiàng)
“GOptionGroup”結(jié)構(gòu)體定義單個(gè)組中的選項(xiàng)。該結(jié)構(gòu)只有私有字段,不應(yīng)該直接訪問。
 組中的所有選項(xiàng)共享相同的翻譯功能。
 需要解析命令行選項(xiàng)的庫(kù)應(yīng)該提供一個(gè)函數(shù)來獲取一個(gè)保存選項(xiàng)的“GOptionGroup”,然后應(yīng)用程序可以將其添加到#GOptionContext中。
 常用接口:
新建:g_option_group_new
釋放:g_option_group_free
添加條目:g_option_group_add_entries
增加引用計(jì)數(shù):g_option_group_ref
減少引用計(jì)數(shù):g_option_group_unref
設(shè)置鉤子函數(shù):g_option_group_set_parse_hooks	將兩個(gè)函數(shù)與@group關(guān)聯(lián)起來,這兩個(gè)函數(shù)將從g_option_context_parse()中調(diào)用,分別在解析第一個(gè)選項(xiàng)之前和最后一個(gè)選項(xiàng)之后調(diào)用。注意,可以在使用g_option_group_new()構(gòu)造組時(shí)指定要傳遞給@pre_parse_func和@post_parse_func的用戶數(shù)據(jù)。
設(shè)置錯(cuò)誤處理:g_option_group_set_error_hook
 
4.3 GOptionEntry 代表一條選項(xiàng)
typedef struct _GOptionEntry   GOptionEntry;
struct _GOptionEntry
{const gchar *long_name;	// --long_namegchar        short_name;	// -short_namegint         flags;		// GOptionFlagsGOptionArg   arg;			// 參數(shù)類型gpointer     arg_data;	// 存取參數(shù)的指針const gchar *description;	// --help打印信息const gchar *arg_description;	// --help打印信息額外參數(shù)
};
 
常用函數(shù):
新建group并添加選項(xiàng):g_option_context_add_main_entries
向group中添加選項(xiàng):g_option_group_add_entries
                            總結(jié)
以上是生活随笔為你收集整理的【GLib】GLib学习笔记(三):gtypes、garray、gerror、goption的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 【GLib】GLib学习笔记(二):源码
 - 下一篇: 【摄像头】摄像头相关名词解释