1c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak/* 2c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak * Copyright 2015 Google Inc. 3c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak * 4c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak * This code is free software; you can redistribute it and/or modify it 5c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak * under the terms of the GNU General Public License version 2 only, as 6c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak * published by the Free Software Foundation. Google designates this 7c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak * particular file as subject to the "Classpath" exception as provided 8c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak * by Google in the LICENSE file that accompanied this code. 9c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak * 10c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak * This code is distributed in the hope that it will be useful, but WITHOUT 11c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak * version 2 for more details (a copy is included in the LICENSE file that 14c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak * accompanied this code). 15c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak * 16c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak * You should have received a copy of the GNU General Public License version 17c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak * 2 along with this work; if not, write to the Free Software Foundation, 18c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 19c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak */ 20c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 21c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak#include "jni.h" 22cab01ac294bb8ded259851673baa4c6ca226f828Steven Moreland#include <nativehelper/JNIHelp.h> 23fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin#include "nativehelper/jni_macros.h" 24c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 25c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak#include <stdlib.h> 26c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak#include <math.h> 27c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 28c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 29d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_cos(jdouble d) { 30c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return cos(d); 31c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 32c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 33c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 34d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_sin(jdouble d) { 35c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return sin(d); 36c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 37c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 38c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 39d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_tan(jdouble d) { 40c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return tan(d); 41c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 42c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 43c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 44d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_asin(jdouble d) { 45c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return asin(d); 46c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 47c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 48c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 49d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_acos(jdouble d) { 50c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return acos(d); 51c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 52c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 53c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 54d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_atan(jdouble d) { 55c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return atan(d); 56c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 57c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 58c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 59d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_exp(jdouble d) { 60c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return exp(d); 61c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 62c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 63c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 64d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_log(jdouble d) { 65c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return log(d); 66c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 67c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 68c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 69d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_log10(jdouble d) { 70c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return log10(d); 71c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 72c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 73c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 74d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_sqrt(jdouble d) { 75c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return sqrt(d); 76c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 77c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 78c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 79d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_cbrt(jdouble d) { 80c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return cbrt(d); 81c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 82c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 83c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 84d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_atan2(jdouble d1, jdouble d2) { 85c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return atan2(d1, d2); 86c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 87c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 88c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 89d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_pow(jdouble d1, jdouble d2) { 90c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return pow(d1, d2); 91c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 92c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 93c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 94d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_IEEEremainder(jdouble dividend, jdouble divisor) { 95c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return remainder(dividend, divisor); 96c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 97c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 98c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 99d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_cosh(jdouble d) { 100c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return cosh(d); 101c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 102c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 103c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 104d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_sinh(jdouble d) { 105c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return sinh(d); 106c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 107c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 108c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 109d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_tanh(jdouble d) { 110c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return tanh(d); 111c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 112c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 113c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 114d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_hypot(jdouble x, jdouble y) { 115c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return hypot(x, y); 116c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 117c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 118c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 119d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_log1p(jdouble d) { 120c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return log1p(d); 121c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 122c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 123c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 124d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_expm1(jdouble d) { 125c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return expm1(d); 126c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 127c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 128c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 129d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_floor(jdouble d) { 130c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return floor(d); 131c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 132c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 133c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 134d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_ceil(jdouble d) { 135c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return ceil(d); 136c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 137c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 138c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw SzczepaniakJNIEXPORT jdouble JNICALL 139d021f1d8475cfdee7ba434d34412c32f40e81693Vladimir MarkoMath_rint(jdouble d) { 140c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak return rint(d); 141c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 142c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 143c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniakstatic JNINativeMethod gMethods[] = { 144fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, IEEEremainder, "(DD)D"), 145fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, acos, "(D)D"), 146fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, asin, "(D)D"), 147fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, atan, "(D)D"), 148fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, atan2, "(DD)D"), 149fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, cbrt, "(D)D"), 150fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, cos, "(D)D"), 151fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, ceil, "(D)D"), 152fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, cosh, "(D)D"), 153fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, exp, "(D)D"), 154fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, expm1, "(D)D"), 155fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, floor, "(D)D"), 156fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, hypot, "(DD)D"), 157fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, log, "(D)D"), 158fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, log10, "(D)D"), 159fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, log1p, "(D)D"), 160fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, pow, "(DD)D"), 161fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, rint, "(D)D"), 162fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, sin, "(D)D"), 163fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, sinh, "(D)D"), 164fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, sqrt, "(D)D"), 165fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, tan, "(D)D"), 166fa5b565a3f6c6d7cbd6106ee8d360304c3a939a3Igor Murashkin FAST_NATIVE_METHOD(Math, tanh, "(D)D"), 167c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak}; 168c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak 169c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniakvoid register_java_lang_Math(JNIEnv* env) { 170c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak jniRegisterNativeMethods(env, "java/lang/Math", gMethods, NELEM(gMethods)); 171c6b8e2367fde6406ba2954797c8217f257ddeb23Przemyslaw Szczepaniak} 172