lua中預設的number型別是double的,在遊戲中很多資料型別用到了64位整型,雖然可以
通過重定義lua_number為__int64以支援64位整型,但這又丟失了對浮點數的支援.
好在可以很方便的往lua中新增自定義的型別,我的需求很簡單,可以支援兩個i64,或1個
i64和乙個lua_number的基本算術和關係運算就夠了.
externint newi64(lua_state *l);
static
const
struct lual_reg i64lib =,
,};class
integer64
static
void register2lua(lua_state *l)
static
void setmetatable(lua_state *l)
#ifndef i64_rela
#define i64_rela(op)\integer64 *i64self = (integer64 *)lua_touserdata(l,1
);\ integer64 *i64other = (integer64 *)lua_touserdata(l,2
);\ lua_pushboolean(l,i64self->m_val op i64other->m_val);\
return1;
#endif
static
int i64le(lua_state *l)
static
int i64lt(lua_state *l)
static
int i64eq(lua_state *l)
#ifndef i64_math
#define i64_math(op)\integer64 *i64self = (integer64 *)lua_touserdata(l,1
);\ integer64 *i64other = (integer64 *)lua_touserdata(l,2
);\ integer64 tmp(
0);\
if(!i64other)\
\if(!i64self)\
else
\ \
setmetatable(l);\
return1;
#endif
static
int i64mod(lua_state *l)
static
int i64div(lua_state *l)
static
int i64mul(lua_state *l)
static
int i64add(lua_state *l)
static
int i64sub(lua_state *l)
static
int i64tostring(lua_state *l)
private
: __int64 m_val;
};static
int newi64(lua_state *l)
integer64::setmetatable(l);
return1;
}
對於算術運算子而言,luanumber op i64 或 i64 op luanumber都沒問題,
比較遺憾的是關係運算子不能這樣,如果乙個luanumber於乙個i64比較則要這樣寫:
local a = i64.new(100)
local b = 100
print(a == i64.new(b))
Ubuntu中vim新增lua支援
系統 ubuntu 15.10 16.04 因為ubuntu15.10系統自帶vim不支援lua,所以得自己編譯安裝。sudo apt install vim nox vim nox可以讓vim新增上lua支援 以下是老方法,可以用上面更簡單的方法 1.解除安裝系統自帶的vim.sudo apt g...
向openwrt新增ap143的支援
0 linux核心版本 3.18.36 openwrt版本cc 1 向檔案 target linux ar71xx generic profiles atheros.mk 中新增ap143型別 define profile ap143 name atheros ap143 reference boa...
動態的向ListView中新增資料
一般情況下,listview都需要在執行時進行改變。如果簡單的往與listview關聯的list中新增資料,是不會引起介面變化的。如果新增了資料之後,呼叫listview.invalidate 也是無效的。必須使用與之關聯的adapter進行更新。如下 adapter adapter adapter...