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