2019独角兽企业重金招聘Python工程师标准>>>

在上文中实现了最基本key->value的内部接口,也能满足一般的需求了。但这个有一个局限,就是一个key就是对应一个值类型,而平常的应用中,很有可能要保存一组相同的数组,类似数组或者List类型。比如查询类请求就可能会有这种需求,这样就需要对上文的数据结构再做一些扩展,可以加一个type类型来表示

<DataDef><Field key="cardNo" type="common" length="19"/><Field key="amount" type="common" length="13"/><Field key="tradeDate" type="common" length="8"/><Field key="tradeTime" type="common" length="6"/><Field key="listData" type="list" size="3" ref="myListData"/>
</DataDef>
<ListDataDef name="myListData"><Field key="listData1" length="19"/><Field key="listData2" length="13"/><Field key="listData3" length="8"/><Field key="listData4" length="6"/>
</ListDataDef>

当 type是common时就是普通的对应一个值,当type是list时就表示是一组值,而这组数据的每一个元素类似一个小Map。size表示给这

这组数据分配多少个元素,至于这个元素的定义通过ref与ListDataDef中的name(myListData)关联就知道了,这样就能计算出每个

元素占的空间,与size相乘就得到了key为listData的数据总共的大小。要实现这种方式需要类似二级映射的方法,上文中所说的内存中

的映射关系算第一级映射,先在一级映射中查找这组数据的基础偏移,当type是common那么就找到了,当时list时就通过ref去查找该

list定义的二级映射,那么就可以计算出每一个元素的每一个域的偏移,就可以访问了。

接口定义如下:

int getDataList(const void* pDataAddr, const char* szKey, struct DataList* pDataList);int getDataInList(const void* pDataAddr, const struct DataList* pDataList,int iIdx, const char* szKey, const int iBufLen, char* szValue);
int petDataInList(void* pDataAddr, const struct DataList* pDataList, int iIdx, const char* szKey, const char* szValue)

DataList保存必要的List的上下文信息,比如基础偏移,二级映射的地址等,iIdx表示获取数组内的第几组元素,szKey自然表示或者某元素的某个数据的值。

这样,本内部接口的数据支持就比较完整了,应该可以适应大部分的应用。

转载于:https://my.oschina.net/onethin/blog/31936

C语言实现一种简单的应用服务器内部数据结构的思路(三)相关推荐

  1. c语言自制服务器之间调用文件夹,C语言实现一种简单的应用服务器内部数据结构的思路(三)...

    在上文中实现了最基本key->value的内部接口,也能满足一般的需求了.但这个有一个局限,就是一个key就是对应一个值类型,而平常的应用中,很有可能要保存一组相同的数组,类似数组或者List类 ...

  2. (转载)一种简单而有趣的数据结构——并查集

    一种简单而有趣的数据结构--并查集 作者:goal00001111(高粱) 一个秘密生物武器落到某地区,导致当地村民丧失部分记忆,只认得自己最熟悉的人,而忘记自己是哪个村子的人了.大家汇集到一个广场, ...

  3. 一种简单而有趣的数据结构——并查集

    一种简单而有趣的数据结构--并查集 作者:goal00001111(高粱) 一个秘密生物武器落到某地区,导致当地村民丧失部分记忆,只认得自己最熟悉的人,而忘记自己是哪个村子的人了.大家汇集到一个广场, ...

  4. 英文字典设计c语言代码,一种简单的英文词典排版系统

    <一种简单的英文词典排版系统>由会员分享,可在线阅读,更多相关<一种简单的英文词典排版系统(20页珍藏版)>请在人人文库网上搜索. 1.中国地质大学(武汉)C语言课程设计论文学 ...

  5. 字母的加密变换 c语言,有一种简单的对英文字母加密的变换方法是将字母的ASIIC编码自动加5,为了保证变更后的数值仍处于英文字母...

    有一种简单的对英文字母加密的变换方法是将字母的ASIIC编码自动加5,为了保证变更后的数值仍处于英文字母0 有一种简单的对英文字母加密的变换方法是将字母的ASIIC编码自动加5,为了保证变更后的数值仍 ...

  6. 鱼眼校正c语言算法,一种简单而精确的鱼眼图像校正算法研究

    舒旭 摘 要: 针对鱼眼图像的校正提出了一种有效区域提取算法,并在鱼眼图像的球面物投影平面展开时与目标半立方体的校正平面建立线性映射.实验结果表明,该算法能有效地提取鱼眼图像轮廓的有效区域,同时半立方 ...

  7. 简单介绍C语言使用四种方法初始化结构体

    这篇文章说明了什么是结构体,介绍了结构体的概念和使用优点,在C语言中如何使用和初始化结构体方法,通过详细的代码展开进行说明,希望该篇文章对你有所帮助 什么是结构体 在实际问题中,一组数据往往有很多种不 ...

  8. c语言编程文章排版,一种简单英文词典排版系统的实现 C语言编程

    一种简单英文词典排版系统的实现 C语言编程 答案:2  信息版本:手机版 解决时间 2019-10-06 18:43 已解决 2019-10-06 03:21 1. 一种简单的英语词典排版系统的实现 ...

  9. c语言编写英语词典软件,C语言课程设计一种简单的英文词典排版系统的实现.doc...

    C语言课程设计一种简单的英文词典排版系统的实现 目 录 课程设计评语2 目 录3 1.课程论文题目4 2.程序设计思路4 3.功能模块图5 4.数据结构设计5 5.算法设计6 6.程序代码13 7.程 ...

最新文章

  1. Java学习总结:14
  2. 【黑科技】在alv中设置字体样式
  3. svpwm仿真_案例12:三相三线PWM整流仿真建模
  4. add_compile_options和CMAKE_CXX_FLAGS的区别
  5. 基于MySQL的高可用可扩展架构探讨
  6. C语言基础知识整理(选择结构)
  7. scaling之旅_机器学习算法之旅 - lwaif的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. SPOJ-COT-Count on a tree(树上路径第K小,可持久化线段树)
  9. 职场人际关系该如何拿捏
  10. mysql 单机_mysql单机多实例——方法1
  11. 零基础学python难吗-学习python12小时后,告诉你,学python真没你想的那么难!
  12. 巨星陨落!图灵奖得主Edmund Clarke感染新冠逝世,教计算机自己检查错误的人走了...
  13. Ansible文件内容修改lineinfile模块(学习笔记五)
  14. SIT测试和UAT测试区别
  15. 转:不同的行业和工作的真实情况是怎样的?
  16. Ubuntu常用软件推荐,图文详细说明及下载
  17. 打算开源一个低代码平台,包含【工作流,业务流,财务,APQC】。技术站 React,typescript,java,mysql
  18. php 微信h5支付 mweb,php微信H5支付讲解(MWEB)
  19. python的30个编程技巧
  20. I/O模型(同步、非同步、阻塞、非阻塞)总结

热门文章

  1. TP5 MYSQL按照原来的IN顺序查询
  2. Win64 驱动内核编程-31.枚举与删除映像回调
  3. PowerShell-1.入门及其常用
  4. 【Linux 内核】Linux 内核源码目录说明 ② ( drivers 目录 | fs 目录 | include 目录 | init 目录 | ipc 目录 | kernel 目录 )
  5. 【Groovy】使用 Groovy 语言开发服务器 Server 和客户端 Client 套接字程序 ( 服务器客户端完整代码示例 | 运行服务器端与客户端效果及过程分析 )
  6. 【Java 虚拟机原理】Class 字节码二进制文件分析 六 ( 属性类型 | Code 属性 | 属性名称索引 | 属性长度 | 操作数栈最大深度 | 局部变量存储空间 | 字节码长度 )
  7. 【Flutter】Flutter 混合开发 ( Flutter 与 Native 通信 | 在 Flutter 端实现 EventChannel 通信 )
  8. 【Android APT】注解处理器 ( 配置注解依赖、支持的注解类型、Java 版本支持 )
  9. 【Android 安全】DEX 加密 ( Application 替换 | 分析 ContentProvider 组件中调用 getApplication() 获取的 Application )
  10. 【组合数学】排列组合 ( 集合排列、分步处理示例 )