阅读lmathlib.c
来源:互联网 发布:征兵心理测试软件 编辑:程序博客网 时间:2024/05/15 01:11
1. 重要的结构 luaL_Reg
typedef struct luaL_Reg { const char *name; lua_CFunction func;} luaL_Reg;
typedef int (*lua_CFunction) (lua_State *L);可以用该结构做参数简单的来创建table
luaL_newlib(L, mathlib);
这样在栈顶创建了一个table,并且table各个域(主要是各种方法 c closure, 注意是没有upvalue)
math lib里面还添加了几个常量,赋值
lua_pushnumber(L, PI); lua_setfield(L, -2, "pi"); lua_pushnumber(L, (lua_Number)HUGE_VAL); lua_setfield(L, -2, "huge"); lua_pushinteger(L, LUA_MAXINTEGER); lua_setfield(L, -2, "maxinteger"); lua_pushinteger(L, LUA_MININTEGER); lua_setfield(L, -2, "mininteger");放一个值到栈顶,然后设置给刚刚创建的这个table。
2. RANDOM 能够处理0-2个参数
lua_gettop()检测参数数量
luaL_checkinteger(L, 1); 这个函数用来检查栈上的参数是否是int值,并返回
; 这个顺序是从上到下(我的理解)
lua_pushinteger(L, (lua_Integer)r + low); 将结果放回栈里
return 1; 表示返回一个值,注意一定要将栈对齐。
static int math_random (lua_State *L) { lua_Integer low, up; double r = (double)l_rand() * (1.0 / ((double)L_RANDMAX + 1.0)); switch (lua_gettop(L)) { /* check number of arguments */ case 0: { /* no arguments */ lua_pushnumber(L, (lua_Number)r); /* Number between 0 and 1 */ return 1; } case 1: { /* only upper limit */ low = 1; up = luaL_checkinteger(L, 1); break; } case 2: { /* lower and upper limits */ low = luaL_checkinteger(L, 1); up = luaL_checkinteger(L, 2); break; } default: return luaL_error(L, "wrong number of arguments"); } /* random integer in the interval [low, up] */ luaL_argcheck(L, low <= up, 1, "interval is empty"); luaL_argcheck(L, low >= 0 || up <= LUA_MAXINTEGER + low, 1, "interval too large"); r *= (double)(up - low) + 1.0; lua_pushinteger(L, (lua_Integer)r + low); return 1;}
0 0
- 阅读lmathlib.c
- lmathlib.c源码解析
- Lua源码剖析(lmathlib.c)
- lmathlib.c解析(5.3.4)
- 快速阅读《Essential C++》
- extern "C" 阅读笔记
- 《Effective C++》阅读笔记
- extern “C” 阅读笔记
- 阅读linux c开源项
- 附录C 推荐阅读
- C-阅读顺序
- samplefmt.c阅读笔记
- frame.c阅读笔记
- 阅读程序c
- perf.c 阅读笔记
- 《Effective C++》阅读笔记
- 【C++】阅读计划
- C声明阅读
- ASP.Net MVC利用NPOI导入导出Excel - RuleLu
- 【spark】win7-64位下编译spark1.6.0
- iOS中的设计模式
- 【动态规划】【数位DP】[2015 Multi-University Training Contest 7]Gray Code
- SlidingDrawer
- 阅读lmathlib.c
- HDU 2141 Can you find it?
- String
- POJ 3279反转问题,dp
- http 的post与get区别与联系,实践中怎么选择
- Pch文件的主要作用 和分类Category的作用
- JZOJ 1164.求和
- 深入理解Java的接口和抽象类
- XML解析