文档章节

Glib实例学习(7)关系/元组

小代码2016
 小代码2016
发布于 2015/08/16 16:15
字数 535
阅读 17
收藏 0
1:概述
   关系:类似数据库,不过目前只限两个字段
   元组:也类似数据库,不过只是关系返回的每条记录

2:结构


typedef struct {
      guint len;
    } GTuples;
3:原型



GRelation* g_relation_new (gint fields);
    void g_relation_index (GRelation *relation,
                                                             gint field,
                                                             GHashFunc hash_func,
                                                             GEqualFunc key_equal_func);
    void g_relation_insert (GRelation *relation,
                                                             ...);
    gboolean g_relation_exists (GRelation *relation,
                                                             ...);
    gint g_relation_count (GRelation *relation,
                                                             gconstpointer key,
                                                             gint field);
    GTuples* g_relation_select (GRelation *relation,
                                                             gconstpointer key,
                                                             gint field);
    gint g_relation_delete (GRelation *relation,
                                                             gconstpointer key,
                                                             gint field);
    void g_relation_destroy (GRelation *relation);

    void g_relation_print (GRelation *relation);

                        GTuples;
    void g_tuples_destroy (GTuples *tuples);
    gpointer g_tuples_index (GTuples *tuples,
                                                             gint index_,
                                                             gint field);
4:实例



#include <stdio.h>
    #include <glib.h>
    #include <glib/gprintf.h>

    struct map {
        int key;
        char *value;
    } m[10] = {
        {0,"zero"},
        {1,"one"},
        {2,"two"},
        {3,"three"},
        {4,"four"},
        {5,"five"},
        {6,"six"},
        {7,"seven"},
        {8,"eight"},
        {9,"nine"}
    };

    typedef struct map map;

    #define NUMS    (sizeof(m)/sizeof(m[0]))

    static void
    test_relation(void)
    {
    // GRelation* g_relation_new(gint fields);
        GRelation *relation = g_relation_new(2);

    // void g_relation_index(GRelation *relation, gint field, GHashFunc hash_func, GEqualFunc key_equal_func);
        g_relation_index(relation, 0, g_int_hash, g_int_equal);
        g_relation_index(relation, 1, g_str_hash, g_str_equal);

    // void g_relation_insert(GRelatioin *relation, ...);
        gint i;
        for (i = 0; i < NUMS; i++)
            g_relation_insert(relation, &m[i].key, m[i].value);

    // gint g_relation_count(GRelation *relation, gconstpointer key, gint fields);
        g_printf("The '%d' should be exist '%d' times now.\t\tResult: %d.\n",
                m[1].key, 1, g_relation_count(relation, &m[1].key, 0));

    // gboolean g_relation_exists(GRelation *relation, ...);
        gboolean b = g_relation_exists(relation, &m[1].key, m[1].value);
        g_printf("The key: '%d' and value: '%s' should be %sfound now.\n",
                m[1].key, m[1].value, b ? "" : "not ");

    // gint g_relation_delete(GRelation *relation, gconstpointer key, gint key);
        g_printf("The key: '%d' has been found '%d' times and deleted now.\n",
                m[1].key, g_relation_delete(relation, &m[1].key, 0));
        
    // GTuples* g_relation_select(GRelation *relation, gconstpointer key, gint field);
    // gpointer g_tuples_index(GTuples *tuples, gint index_, gint field);
    // void g_tuples_destroy(GTuples *tuples);
        g_printf("The all records now:\n");
        for (i = 0; i < NUMS; i++) {
            GTuples *tuples = g_relation_select(relation, m[i].value, 1);
            gint j;
            for (j = 0; j < tuples->len; j++)
                g_printf("Key: %d\t\tValue: %s\n",
                        *(gint *)g_tuples_index(tuples, j, 0),
                        (gchar *)g_tuples_index(tuples, j, 1));
            g_tuples_destroy(tuples);
        }
        g_printf("\n");
    // void g_relation_print(GRelation *relation);
    //    g_relation_print(relation);

    // void g_relation_destroy(GRelation *relation);
        g_relation_destroy(relation);
    }

    int
    main(void)
    {
        printf("BEGIN:\n************************************************************\n");
        test_relation();
        printf("\n************************************************************\nDONE\n");
        
        return 0;
    }
5:结果



[xied1@soho use]$ gcc `pkg-config --cflags --libs glib-2.0` -Wall -o relation relation.c
    [xied1@soho use]$ ./relation
    BEGIN:
    ************************************************************
    The '1' should be exist '1' times now. Result: 1.
    The key: '1' and value: 'one' should be found now.
    The key: '1' has been found '1' times and deleted now.
    The all records now:
    Key: 0 Value: zero
    Key: 2 Value: two
    Key: 3 Value: three
    Key: 4 Value: four
    Key: 5 Value: five
    Key: 6 Value: six
    Key: 7 Value: seven
    Key: 8 Value: eight
    Key: 9 Value: nine


    ************************************************************
    DONE



6:小结
  • 创建: g_relation_new()
  • 插入: g_relation_insert()
  • 统计: g_relation_count()
  • 选择:  g_relation_select()
  • 删除: g_relation_delete()
  • 销毁: g_relation_destroy()


本文转载自:http://blog.chinaunix.net/uid-25696269-id-1625214.html

小代码2016
粉丝 45
博文 328
码字总数 153495
作品 0
安阳
程序员
私信 提问
基于list_head实现的通用内核Hash表

原文出处:春秋十二月 由于linux内核中的struct listhead已经定义了指向前驱的prev指针和指向后继的next指针,并且提供了相关的链表操作方法,因此为方便复用,本文在它的基础上封装实现了一...

春秋十二月
2016/01/01
0
0
Glib实例学习(8)系列一(完)

目前为止,我们学习了Glib的基本数据类型,我们基本可以用这些类型管理我们需要的数据了,我们现在来回顾下前面的内容: 单链表 双链表 哈希表 动态数组 平衡二叉树 双端队列 关系/元组 我们...

小代码2016
2015/08/16
186
0
使用mysql5.7.16头文件库文件编译安装atlas

最近mysql数据库升级到5.7.16,而中间件atlas之前是基于mysql5.6编译的,打算重新编译下atlas并使用mysql5.7.16的库文件头文件。这里主要介绍下编译过程遇到问题及解决方法。 由于需要glib版...

hnr1017
2018/07/03
0
0
源码安装gtk+-2.0时遇到的几个问题及解决办法

我用的发行版是 Ubuntu7.04,最简单的办法就是用“新立得软件包管理器”,安装“libgtk2.0-dev”这个包即可。 但我打算从源码安装。 需要下载的包: ftp://mirrors.kernel.org/gnu/gettext/g...

j_m
2012/07/13
135
0
请教一个关于glib中hash table的问题

请问glib的hash table能不能用自定义的结构体做key? 我现在有一个需求,要用到hash. 我想把tcp udp中的源ip,目的ip,源端口号,目的端口号这四元组做为一个结构体.用来做key,然后value是其它的一...

跌落的阳光碎片
2017/03/08
94
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0
redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
昨天
4
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
昨天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
昨天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部