[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Re: Lua with ints and floats
- From: "John Passaniti" <jmp@...>
- Date: Mon, 10 Jul 2000 09:21:16 -0400
Martin Doering wrote:
> How do you shift with floats??? Do you convert them to
> ints, shift, and convert them back?
I'm not really addressing the larger issue of making Lua aware of an int
type, but I saw this conversation and thought I would toss in the
following. Lua guru's will probably yawn, but maybe this might help
someone. Hey, I'm new with the language, but having a great time working
with Lua. This by the way is for Lua 4.0.
I needed to have some of the integer operators of C in my Lua code, so I
wrote the following. The Lua macro luaL_check_int casts the LUA_NUM_TYPE
(normally double) into an integer. Sending back, lua_pushnumber will
coerce the integer result of these operations into a LUA_NUM_TYPE.
#include <stdlib.h>
#define LUA_REENTRANT
#include "lauxlib.h"
#include "lua.h"
#include "lualib.h"
#define DYADIC(name, op) \
static void name(lua_State* L) { \
lua_pushnumber(L, luaL_check_int(L, 1) op luaL_check_int(L, 2)); \
}
#define MONADIC(name, op) \
static void name(lua_State* L) { \
lua_pushnumber(L, op luaL_check_int(L, 1)); \
}
DYADIC(intMod, % )
DYADIC(intAnd, & )
DYADIC(intOr, | )
DYADIC(intXor, ^ )
DYADIC(intShiftl, <<)
DYADIC(intShiftr, >>)
MONADIC(intBitNot, ~ )
static const struct luaL_reg intMathLib[] = {
{"mod", intMod },
{"band", intAnd },
{"bor", intOr },
{"bxor", intXor },
{"bnot", intBitNot },
{"shiftl", intShiftl },
{"shiftr", intShiftr },
};
void lua_intMathLibOpen (lua_State *L) {
luaL_openl(L, intMathLib);
}