Table 的相关结构的定义在 lobject.h
里面。在 Lua 里面 Table 有两个结构,一个是 aray,另一个是 hash。array 是对应正整数作为 key 的情况。
在 ltable.h
里面定义是一些辅助宏。
在 ltable.c
的开头定义了一些常量,宏。
我们先来看 luaH_new
方法。
这里设置了一些默认的属性,然后调用 setnodevector
。
新建的 table 传进来的 size 是 0,那样的话,就是用 dummynode 来初始化 table。别的情况就是在 resize 的时候调用这个方法,如果是此种情况下的话,则会分配了 2 ** luaO_ceillog2(size)
长度的空间来保存 node。
这里的入口应该是 luaH_get
,根据 key 来用不同的方法来用不同的方法获取数据。
这个应该是迭代的时候回用到。
这部分考虑的是当大小变化时,需要重新 hash。
这个方法用来释放 table 的空间。
这部分是为了产生新的 key 的方法,主要是发生碰撞的处理。
这个是用 key 来保存值。
这个看起来的作用就是注释描述的,但是具体作用我还不清楚。