向lua中新增i64的支援

2022-02-24 05:04:52 字數 1823 閱讀 3845

lua中預設的number型別是double的,在遊戲中很多資料型別用到了64位整型,雖然可以

通過重定義lua_number為__int64以支援64位整型,但這又丟失了對浮點數的支援.

好在可以很方便的往lua中新增自定義的型別,我的需求很簡單,可以支援兩個i64,或1個

i64和乙個lua_number的基本算術和關係運算就夠了.

extern

int 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...