From 5ccc4ee6bccbc463a12d18489ec99b5ed58cf33b Mon Sep 17 00:00:00 2001 From: Nathanne Isip Date: Sat, 19 Oct 2024 12:07:59 +0800 Subject: [PATCH] Mathematics-related native functions for Zhivo standard library. --- lib/zhvlib/Math.cc | 55 +++++++++++++++++++++++++++++++++++++++++++++ lib/zhvlib/Math.hpp | 32 ++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 lib/zhvlib/Math.cc create mode 100644 lib/zhvlib/Math.hpp diff --git a/lib/zhvlib/Math.cc b/lib/zhvlib/Math.cc new file mode 100644 index 0000000..b600910 --- /dev/null +++ b/lib/zhvlib/Math.cc @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2024 - Nathanne Isip + * This file is part of Zhivo. + * + * Zhivo is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation, either version 3 of the License, + * or (at your option) any later version. + * + * Zhivo is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Zhivo. If not, see . + */ + +#include "zhvlib/Math.hpp" + +#include +#include + +ZHIVO_FUNC(math_cos) { + if(args.size() != 1) + throw std::runtime_error("Expecting only 1 argument."); + + DynamicObject value = args.at(0); + if(!value.isNumber()) + throw std::runtime_error("Argument type is not of number."); + + return DynamicObject(cos(value.getNumber())); +} + +ZHIVO_FUNC(math_sin) { + if(args.size() != 1) + throw std::runtime_error("Expecting only 1 argument."); + + DynamicObject value = args.at(0); + if(!value.isNumber()) + throw std::runtime_error("Argument type is not of number."); + + return DynamicObject(sin(value.getNumber())); +} + +ZHIVO_FUNC(math_tan) { + if(args.size() != 1) + throw std::runtime_error("Expecting only 1 argument."); + + DynamicObject value = args.at(0); + if(!value.isNumber()) + throw std::runtime_error("Argument type is not of number."); + + return DynamicObject(tan(value.getNumber())); +} diff --git a/lib/zhvlib/Math.hpp b/lib/zhvlib/Math.hpp new file mode 100644 index 0000000..dca610f --- /dev/null +++ b/lib/zhvlib/Math.hpp @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2024 - Nathanne Isip + * This file is part of Zhivo. + * + * Zhivo is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation, either version 3 of the License, + * or (at your option) any later version. + * + * Zhivo is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Zhivo. If not, see . + */ + +#ifndef ZHIVO_STDLIB_MATH_CC +#define ZHIVO_STDLIB_MATH_CC + +#include "ZhivoLibrary.hpp" + +ZHIVO_LIB_START + +ZHIVO_FUNC(math_cos); +ZHIVO_FUNC(math_sin); +ZHIVO_FUNC(math_tan); + +ZHIVO_LIB_END + +#endif