转载出处:http://my.oschina.net/xhan/blog/307171

先来看一下 Lua 中常用的几个数据结构:

先看一下 opcode.h 中的:

Type 枚举是 Lua 中的几种数据类型。

 1 typedef enum
 2 {
 3  T_MARK,
 4  T_NIL,
 5  T_NUMBER,
 6  T_STRING,
 7  T_ARRAY,
 8  T_FUNCTION,
 9  T_CFUNCTION,
10  T_USERDATA
11 } Type;

View Code

Value 联合体是 Lua 的数据类型定义。

1 typedef union
2 {
3  Cfunction      f;
4  real         n;
5  char          *s;
6  Byte          *b;
7  struct Hash    *a;
8  void           *u;
9 } Value;

View Code

Object 带标签的数据类型,其中 tag 字段是 Type 类型,Value 是 Object 的值。

1 typedef struct Object
2 {
3  Type  tag;
4  Value value;
5 } Object;

View Code

Symbol 符号,一个是符号的名字,一个是符号的值,其值是一个 Object 类型。

1 typedef struct
2 {
3  char   *name;
4  Object  object;
5 } Symbol;

View Code

以下的一些代码就是一些上面数据结构的操作宏。

hash.h  中定义了关联数组,也就是 lua 里的 table 类型。

// table 中的无素
typedef struct node
{
 Object ref; // 元素的 key
 Object val; // 元素的 value
 struct node *next; // 指向下一个元素的指针。
} Node;

// table 定义
typedef struct Hash
{
 char mark;
 unsigned int nhash;
 Node **list;
} Hash;

其中:

mark 在垃圾回收时的标记

nhash table 中的元素个数

list 元素的列表。

其它地方也没有别的数据结构了。

转载于:https://www.cnblogs.com/vd01/p/4931362.html

Lua1.0 数据结构相关推荐

  1. Lua1.0 代码分析 库

    为什么80%的码农都做不了架构师?>>>    Lua1.0 代码分析 库 库的代码相对比较简单.这里以数学库为例进行说明. 比如看下这个取绝对值的数学函数 static void ...

  2. Lua1.0 代码分析 opcode.c

    为什么80%的码农都做不了架构师?>>>    opcode.c 代码分析 Lua1.0 虚拟机的实现,语法分析中生成的字节码交给它 lua_execute 来执行. 这个文件的主要 ...

  3. Lua1.0 代码分析 table.c

    转载出处:http://my.oschina.net/xhan/blog/307961 table.c 代码分析 全局符号,常量,字符串,关联数组,文件列表的定义. 全局符号: 初始有 5 个基本的符 ...

  4. 0.数据结构学习笔记大纲

    推荐学习参考书籍: 实体课本:  1.严蔚敏.吴伟民编著的教材(都是伪算法) 实现代码:    高一凡 数据结构概述 定义:          我们如何把现实中大量而复杂的问题以特定的数据类型和特定的 ...

  5. cocos2d-x 3.0 数据结构(3/3) cocos2d::Value

    于v3.0beta加入 定义在"COCOS2DX_ROOT/cocos/base"的头文件"CCValue.h"中 class Value; cocos2d:: ...

  6. 数据结构源码笔记(C语言):英文单词按字典序排序的基数排序

    //实现英文单词按字典序排序的基数排序算法#include<stdio.h> #include<malloc.h> #include<string.h>#defin ...

  7. 数据结构源码笔记(C语言):索引文件建立和查找

    //实现索引文件建立和查找算法#include<stdio.h> #include<malloc.h> #include<string.h> #include< ...

  8. 数据结构源码笔记(C语言):快速排序

    //实现快速排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; type ...

  9. 数据结构源码笔记(C语言):冒泡排序

    //冒泡排序算法实现 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; type ...

  10. 数据结构源码笔记(C语言):希尔插入排序

    //实现希尔插入排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; ty ...

最新文章

  1. 计算机硬盘工作时应该避免什么,什么是电脑硬盘?有何作用?如何保养它?
  2. 计算机英语词汇的特点,电子商务英语词汇都有哪些特点
  3. luogu 4768
  4. 快手抢占短视频第一股,增长惊人,腾讯又是大赢家!
  5. 【kafka】Unexpected handshake request with client mechanism GSSAPI, enabled mechanisms are
  6. 【Elasticsearch】Elasticsearch 集群 运维 高性能 架构设计 高负载
  7. Linux文本转语音合成教程,〔教程〕使用TTS将文本转语音输出
  8. 武魂觉醒s系列服务器,斗罗大陆武魂觉醒斗罗大陆9服开服时间表_斗罗大陆武魂觉醒新区开服预告_第一手游网手游开服表...
  9. python交叉编译环境_交叉编译Python
  10. PA塑料EN45545-2:2020R22 HL3防火检测的难易程度
  11. java poi 水印_poi excel如何设置水印透明度
  12. im服务器开源项目,Oschat IM 开源即时通讯项目介绍
  13. 红黑树模拟软件_红黑树,超强动静图详解,简单易懂
  14. ESP8266刷入MicroPython固件教程
  15. 3.破解百度翻译 输入keyWord返回对应翻译的数据
  16. 看完这个教程,不怕Xshell中修改字体有困难
  17. 平面设计如何做出空间创意作品?
  18. python打字机效果_打字效果动画的4种实现方法(超简单)
  19. Google Map开发之实战
  20. Java获取当前年月日、时间

热门文章

  1. K3S kubernetes-限制节点可启动的pod数量
  2. easyui 1.4.3 窗口创建或拖动超过父元素 边界 BUG 解决方法
  3. Oracle 视图、序列、索引、游标、触发器、事务
  4. 企业微信机器人实现发送消息的功能(文本消息,图片消息,图片+文字消息)
  5. rmd文件怎么转换html文件,如何将Rmd文件的html输出向左对齐
  6. 阶段3 2.Spring_04.Spring的常用注解_2 常用IOC注解按照作用分类
  7. Spring MVC(十六)--Spring MVC国际化实例
  8. WordPress更改“固定链接”后 ,页面出现404的解决方法
  9. 转python 发送邮件实例
  10. 在Linux上运行ASP.NET vNext