19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "jni.h"
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <android_runtime/AndroidRuntime.h>
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <math.h>
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <float.h>
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SkTypes.h"
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass MathUtilsGlue {
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static float FloorF(JNIEnv* env, jobject clazz, float x) {
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return floorf(x);
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static float CeilF(JNIEnv* env, jobject clazz, float x) {
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return ceilf(x);
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static float SinF(JNIEnv* env, jobject clazz, float x) {
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return sinf(x);
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static float CosF(JNIEnv* env, jobject clazz, float x) {
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return cosf(x);
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static float SqrtF(JNIEnv* env, jobject clazz, float x) {
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return sqrtf(x);
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
285d728bb9ff8c6ad89d5a1b88b2804f954d45d763Jeff Brown
295d728bb9ff8c6ad89d5a1b88b2804f954d45d763Jeff Brown    static float ExpF(JNIEnv* env, jobject clazz, float x) {
305d728bb9ff8c6ad89d5a1b88b2804f954d45d763Jeff Brown        return expf(x);
315d728bb9ff8c6ad89d5a1b88b2804f954d45d763Jeff Brown    }
32270e3381e7053c3b15aa8f508c9df9d98032cd62Jeff Brown
33e2c279e8a1abc2cc7bc87b94a514a563b814cdc1Jeff Brown    static float PowF(JNIEnv* env, jobject clazz, float x, float y) {
34e2c279e8a1abc2cc7bc87b94a514a563b814cdc1Jeff Brown        return powf(x, y);
35e2c279e8a1abc2cc7bc87b94a514a563b814cdc1Jeff Brown    }
36e2c279e8a1abc2cc7bc87b94a514a563b814cdc1Jeff Brown
37270e3381e7053c3b15aa8f508c9df9d98032cd62Jeff Brown    static float HypotF(JNIEnv* env, jobject clazz, float x, float y) {
38270e3381e7053c3b15aa8f508c9df9d98032cd62Jeff Brown        return hypotf(x, y);
39270e3381e7053c3b15aa8f508c9df9d98032cd62Jeff Brown    }
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod gMathUtilsMethods[] = {
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    {"floor", "(F)F", (void*) MathUtilsGlue::FloorF},
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    {"ceil", "(F)F", (void*) MathUtilsGlue::CeilF},
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    {"sin", "(F)F", (void*) MathUtilsGlue::SinF},
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    {"cos", "(F)F", (void*) MathUtilsGlue::CosF},
475d728bb9ff8c6ad89d5a1b88b2804f954d45d763Jeff Brown    {"sqrt", "(F)F", (void*) MathUtilsGlue::SqrtF},
485d728bb9ff8c6ad89d5a1b88b2804f954d45d763Jeff Brown    {"exp", "(F)F", (void*) MathUtilsGlue::ExpF},
49e2c279e8a1abc2cc7bc87b94a514a563b814cdc1Jeff Brown    {"pow", "(FF)F", (void*) MathUtilsGlue::PowF},
50270e3381e7053c3b15aa8f508c9df9d98032cd62Jeff Brown    {"hypot", "(FF)F", (void*) MathUtilsGlue::HypotF},
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint register_android_util_FloatMath(JNIEnv* env)
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int result = android::AndroidRuntime::registerNativeMethods(env,
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                            "android/util/FloatMath",
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                            gMathUtilsMethods,
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                            SK_ARRAY_COUNT(gMathUtilsMethods));
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return result;
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
62