当前位置: 首页 > 编程日记 > 正文

【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

相关文章:

Bert时代的创新:Bert应用模式比较及其它 | 技术头条

作者&#xff1a;张俊林&#xff0c;中国中文信息学会理事&#xff0c;中科院软件所博士。目前在新浪微博 AI Lab 担任资深算法专家。在此之前&#xff0c;张俊林曾经在阿里巴巴任资深技术专家并负责新技术团队&#xff0c;以及在百度和用友担任技术经理及技术总监等职务。他是…

HashSet 详解

为什么80%的码农都做不了架构师&#xff1f;>>> package com.sun;/* |——SortedSet接口——TreeSet实现类 Set接口——|——HashSet实现类|——LinkedHashSet实现类 HashSet 此类实现 Set 接口&#xff0c;由哈希表&#xff08;实际上是一个 HashMap 实例&#…

肖仰华:知识图谱落地,不止于“实现”

作者 | Just出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;“知识将比数据更重要&#xff0c;得知识者得天下”&#xff0c;去年十月&#xff0c;在 CSDN 对肖仰华教授的一篇约稿里&#xff0c;他指出数据的真正价值蕴含于其深加工的知识中。从 Google 于 2012 年提…

【摄像头】摄像头相关名词解释

1、白平衡 白平衡,字面上的理解是白色的平衡。白平衡是描述显示器中红、绿、蓝三基色混合生成后白色精确度的一项指标。 那什么是白色?这就涉及到一些色彩学的知识,白色是指反射到人眼中的光线由于蓝、绿、红三种色光比例相同且具有一定的亮度所形成的视觉反应。我们都知道…

金额跳动动画效果

前言 金额效果&#xff0c;因为觉得公司目前的金额太乏味&#xff0c;决定加点效果&#xff0c;也特此写了个小demo&#xff0c;代码非常简单&#xff0c;贴代码方便大家看看 通过 runtime 建立属性(setter/getter方法) /** 由于分类中要添加属性&#xff0c;所以通过runtime方…

POJ 3070 Fibonacci

裸奔的矩阵乘法&#xff0c;当模板了。 #include <iostream>#include <cstring>#include <cstdio>using namespace std;const int N 2;const int MOD 10000;struct Mat {long long mat[N][N];void init() {for(int i 0; i < N; i) {for(int j 0; j &l…

推荐一个小而美的Python代码格式化工具

代码可读性是评判代码质量的标准之一&#xff0c;有一个衡量代码质量的标准是 Martin 提出的 “WFT” 定律&#xff0c;即每分钟爆出 “WTF” 的次数。你在读别人代码或者做 Code Review 的时候有没有 “WTF” 冲动呢&#xff1f; 为了帮助开发者统一代码风格&#xff0c;Pytho…

【摄像头】摄像机工作原理

1、摄像机工作原理 外部光线穿过镜头(lens)后&#xff0c; 经过滤光片(color filter)滤波后照射到光学传感器(Sensor)上面&#xff0c; Sensor 将从 lens 上传导过来的光线转换为电信号&#xff0c;再通过内部的 AD 转换为数字信号。 如果 Sensor 没有集成 DSP&#xff0c;则通…

@程序员,别再自己闷头学了

60 年冬去春来&#xff0c;人工智能技术发展起起落落。现在是 2019 年&#xff0c;属于 AI 不可阻挡的新转机正强势袭来。 科技巨头一向是未来技术发展最重要的风向标。2011 年&#xff0c;随着 Google 将一线业务引入深度学习技术&#xff0c;落伍移动时代的微软也拉起了一支…

linux下的oracle10g rman备份

RMAN是Oracle提供的一个数据库备份和恢复工具&#xff0c;利用rman可以比较方便的对数据库进行备份。Oracle 数据库可运行在归档和非归档模式下&#xff0c;这两者的区别就在于对redo log的处理。归档模式下&#xff0c;当一个redo log 写满之后&#xff0c;就会把这个redo lo…

最全Python算法实现资源汇总!

整理 | Rachel责编 | Jane出品 | Python大本营&#xff08;ID&#xff1a;pythonnews&#xff09;【导语】数据结构与算法是所有人都要学习的基础课程&#xff0c;自己写算法的过程可以帮助我们更好地理解算法思路&#xff0c;不要轻视每一个算法&#xff0c;一些虽然看似容易&…

【摄像头】低照度和光圈

1、低照度 低照度摄像机是指在较低光照度的条件下仍然可以摄取清晰图像的摄像头。 照度,即光照强度,是一种物理术语,指单位面积上所接受可见光的能量。单位:勒克斯Lux,简作Lx。 照度和光圈大小的关系:镜头的光圈越大(F值越小),所需的照度越低。这个好理解,光圈大了进…

CART树 python小样例

决策树不断将数据切分成小数据集&#xff0c;直到所有目标变量完全相同&#xff0c;或者数据不能再切分为止&#xff0c;决策时是一种贪心算法&#xff0c;它要在给定的时间内做出最佳选择&#xff0c;但并不关心能否达到最优 树回归 优点&#xff1a;可以对复杂和非线性的数据…

Directx教程(24) 简单的光照模型(3)

在工程myTutorialD3D11_17中&#xff0c;我们重新定义我们的cube顶点法向&#xff0c;每个三角形面的顶点法向都是和这个三角形的面法向是一致的。如下图所示&#xff1a; 在该工程中&#xff0c;我们还修改了CubeModelClass文件&#xff0c;从一个cube.txt文件中读cube顶点位置…

SSM框架之批量增加示例(同步请求jsp视图解析)

准备环境:SSM框架JDK8/JDK7MySQL5.7MAVEN3以上Tomcat8/7应用服务器 示例说明: 分发给用户优惠券&#xff0c;通过checkbox选中批量分发&#xff0c;对应也就是批量增加。 对于公司使用freemarket或者jsp或者volocity&#xff0c;有一定的启示意思。 不论视图用的是jsp或者非jsp…

四大指标超现有模型!少样本的无监督图像翻译效果逆天| 技术头条

作者 | Ming-yu Liu, Xun Huang, Arun Mallya, Tero Karras, Timo Aila, Jaakko Lehtinen译者 | linstancy编辑 | Rachel出品 | AI 科技大本营&#xff08;ID:rgznai100&#xff09;【导读】在已有的图像翻译研究中&#xff0c;模型需要使用大量的多类别图像数据&#xff0c;在…

【摄像头】镜头焦距

【摄像头】低照度和光圈 1、简介 在镜头上有两个非常重要的参数,一个是光圈、一个是焦距。 如果在镜头上只标注有一个数字的就是定焦头,比如:50mm,就表示这是一只焦距为50mm的定焦头。 如果在镜头上标注有两个数字的就是变焦头,比如:18-55mm,就表示这只镜头焦距覆盖…

(转)C语言字节对齐

图片可以在下面的博客中看到. 转自:http://blog.csdn.net/bigloomy/article/details/6633008 可能有不少读者会问&#xff0c;字节对齐有必要拿出来单独写一篇博客嘛&#xff1f;我觉得是很有必要&#xff0c;但是它却是被很多人所忽视的一个重点。那么我们使用字节对齐的作用…

赌5毛钱,你解不出这道Google面试题

作者 | Kevin Ghadyani 译者 | 清儿爸 编辑 | Rachel 出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09; 为了更了解其他人对软件工程的看法&#xff0c;我开始疯狂在 YouTube 上追 TechLead 的视频。在接下来的几天里&#xff0c;我为他在 Google 工作时…

【摄像头】摄像头IRCUT滤光片

1、IRCUT组成原理 IRCUT由两层滤光片组成&#xff0c;一片红外截止或吸收滤光片和一片全透光谱滤光片。 白天是红外截止滤光片工作&#xff0c;晚上是全透滤光片工作&#xff1a; 白天摄像头可以接收到人眼无法识别的红外线&#xff0c;会导致图像与肉眼所见有偏差&#xff0c…

修改Java-source版本

2019独角兽企业重金招聘Python工程师标准>>> pom.xml添加以下&#xff1a;<plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin>&l…

HDU 2519 新生晚会【求组合数】

Problem Description开学了&#xff0c;杭电又迎来了好多新生。ACMer想为新生准备一个节目。来报名要表演节目的人很多&#xff0c;多达N个&#xff0c;但是只需要从这N个人中选M个就够了&#xff0c;一共有多少种选择方法&#xff1f;Input数据的第一行包括一个正整数T&#x…

【摄像头】宽动态范围

1、什么是动态范围 简单的来说,就是摄像机拍摄的同一个画面内,能正常显示细节的最亮和最暗物体的亮度值所包含的那个区间。动态范围越大,过亮或过暗的物体在同一个画面中都能正常显示的程度也就越大。 根据百度百科,当在强光源(日光、灯具或反光等)照射下的高亮度区域及…

mysql format函数对数字类型转化的坑

原值param 1234.5678 format(param, 2) &#xff08;不建议&#xff09; 结果&#xff0c;字符串类型&#xff0c;123,4.57 会导致你图表char 生成失败&#xff0c;直接变0 convert(param, decimal(12,2))&#xff08;建议&#xff09; 结果, 数值类型 1234.57 cast(p…

打造AI产教融合共赢生态,微软亚洲研究院扩大开放了这些资源

2019年5月10日&#xff0c;由教育部国际合作与交流司、科学技术司指导&#xff0c;教育部中外人文交流中心主办&#xff0c; 微软亚洲研究院承办&#xff0c;信息技术新工科产学研联盟特别协办的“中国高校人工智能人才国际培养计划”2019国际人工智能专家论坛暨2019微软新一代…

Microsoft.NET框架程序设计--20 CLR寄宿、应用程序域、反射

应用程序域是CLR提供的一种旨在减少内存使用、提高系统系能的新型机制。而反射使得我们可以很容易使用自己活着第三方的类型来增强应用程序的功能&#xff0c;从而帮助我们设计出可动态扩展的应用程序。 1.元数据&#xff1a;.NET框架的基石 元数据描述了一个类型的字段和方法。…

上手!深度学习最常见的26个模型练习项目汇总

作者&#xff1a;沧笙踏歌转载自AI部落联盟&#xff08;id&#xff1a;AI_Tribe&#xff09;今天更新关于常见深度学习模型适合练手的项目。这些项目大部分是我之前整理的&#xff0c;基本上都看过&#xff0c;大概俩特点&#xff1a;代码不长&#xff0c;一般50-200行代码&…

【EMC】电磁兼容性相关名词解释、基础知识

一、名词解释 1、EMC EMC&#xff08;Electro Magnetic Compatibility&#xff09;直译是“电磁兼容性”。意指设备所产生的电磁能量既不对其它设备产生干扰&#xff0c;也不受其他设备的电磁能量干扰的能力。 2、EMI——攻击力 EMI(Electro Magnetic Interference)直译为&…

定时任务 Cron表达式

Cron表达式是一个表示时间周期的字符串。 分为6或7个域&#xff0c;每一个域代表一个含义。 验证工具&#xff1a; http://cron.qqe2.com/Cron有如下两种语法格式&#xff1a; 格式1&#xff1a;秒分时天&#xff08;月&#xff09;月天&#xff08;星期&#xff09;年格式2&a…

C语言字符计算器

这又是以前的一篇文章&#xff0c;觉得有纪念价值。就发过来了。 去年暑假自己下了C语言实战105例&#xff0c;看了几个基础的&#xff0c;其中有一个是关于字符计算器的 我看起来蛮简单的&#xff0c;不过自己做起来我觉得还是做得少了&#xff0c;懵懵懂懂的。 现在想起那个觉…