commit 79d59d63b37b4b7ffba205dfab5d18da8d6a76d4 Author: Yessiest Date: Sat Apr 9 22:56:18 2022 +0400 Initial commit diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9ba032e --- /dev/null +++ b/Makefile @@ -0,0 +1,16 @@ +LUA_VERSION=5.2 +INCLUDES=-I/usr/lib/lua${LUA_VERSION} +CXX=g++ +CFLAGS=-fPIC +LIBS=-lqalculate +OUTPUT=libqalculate.so + +all: qalculator.o + ${CXX} ${LIBS} -shared $< -o libqalculator.so + +qalculator.o: qalculator.cpp + ${CXX} ${INCLUDES} -c $< -o $@ ${CFLAGS} + +clean: + ${RM} libqalculator.so qalculator.o + diff --git a/qalculator.cpp b/qalculator.cpp new file mode 100644 index 0000000..f1607a8 --- /dev/null +++ b/qalculator.cpp @@ -0,0 +1,45 @@ +#include +#include +#include + +const char* qalculate(const char* input, bool exact_mode) { + Calculator* c = new Calculator(); + c->loadExchangeRates(); + c->loadGlobalDefinitions(); + c->loadLocalDefinitions(); + std::string Input = input; + std::string Output; + if (exact_mode) { + default_user_evaluation_options.approximation = APPROXIMATION_EXACT; + } else { + default_user_evaluation_options.approximation = APPROXIMATION_APPROXIMATE; + } + Output = c->calculateAndPrint(Input,2000,default_user_evaluation_options); + delete c; + std::cout << Output << std::endl; + char * output = new char [Output.length()+1]; + Output.copy(output,Output.length()); + output[Output.length()] = "\0"[0]; + return output; +} + +extern "C" +int l_qalc(lua_State* L) { + const char * input = luaL_checkstring(L, 1); + bool exact_mode = lua_toboolean(L, 2); + const char * output = qalculate(input, exact_mode); + lua_pushstring(L, output); + return 1; +} + +extern "C" +int luaopen_libqalculator(lua_State* L) { + static const struct luaL_Reg library [] = + { + {"qalc", l_qalc}, + {NULL, NULL} + }; + luaL_register(L, "qalc", library); + return 1; +} + diff --git a/qalculator.o b/qalculator.o new file mode 100644 index 0000000..adc7c90 Binary files /dev/null and b/qalculator.o differ diff --git a/test.lua b/test.lua new file mode 100644 index 0000000..a5bd1a4 --- /dev/null +++ b/test.lua @@ -0,0 +1,3 @@ +qalculate = require("libqalculator") +print(qalculate.qalc("sin(3 rad)")) +print(qalculate.qalc("sin(3 rad)",true))