1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/*
2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Copyright (C) 2007 The Android Open Source Project
3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * you may not use this file except in compliance with the License.
6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * You may obtain a copy of the License at
7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
9282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Unless required by applicable law or agreed to in writing, software
11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * See the License for the specific language governing permissions and
14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * limitations under the License.
15282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */
16282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
17282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipackage android.util;
18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
19282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.layoutlib.bridge.impl.DelegateManager;
20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.tools.layoutlib.annotations.LayoutlibDelegate;
21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/**
23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Delegate implementing the native methods of android.util.FloatMath
24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Through the layoutlib_create tool, the original native methods of FloatMath have been replaced
26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * by calls to methods of the same name in this delegate class.
27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Because it's a stateless class to start with, there's no need to keep a {@link DelegateManager}
29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * around to map int to instance of the delegate.
30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */
32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/*package*/ final class FloatMath_Delegate {
33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /** Prevents instantiation. */
35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    private FloatMath_Delegate() {}
36282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
37282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /**
38282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Returns the float conversion of the most positive (i.e. closest to
39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * positive infinity) integer value which is less than the argument.
40282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     *
41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * @param value to be converted
42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * @return the floor of value
43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @LayoutlibDelegate
45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*package*/ static float floor(float value) {
46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return (float)Math.floor(value);
47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /**
50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Returns the float conversion of the most negative (i.e. closest to
51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * negative infinity) integer value which is greater than the argument.
52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     *
53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * @param value to be converted
54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * @return the ceiling of value
55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @LayoutlibDelegate
57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*package*/ static float ceil(float value) {
58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return (float)Math.ceil(value);
59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
60282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
61282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /**
62282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Returns the closest float approximation of the sine of the argument.
63282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     *
64282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * @param angle to compute the cosine of, in radians
65282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * @return the sine of angle
66282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
67282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @LayoutlibDelegate
68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*package*/ static  float sin(float angle) {
69282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return (float)Math.sin(angle);
70282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /**
73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Returns the closest float approximation of the cosine of the argument.
74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     *
75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * @param angle to compute the cosine of, in radians
76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * @return the cosine of angle
77282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @LayoutlibDelegate
79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*package*/ static float cos(float angle) {
80282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return (float)Math.cos(angle);
81282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
82282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
83282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /**
84282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Returns the closest float approximation of the square root of the
85282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * argument.
86282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     *
87282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * @param value to compute sqrt of
88282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * @return the square root of value
89282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @LayoutlibDelegate
91282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*package*/ static float sqrt(float value) {
92282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return (float)Math.sqrt(value);
93282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
94282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
95282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /**
96282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Returns the closest float approximation of the raising "e" to the power
97282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * of the argument.
98282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     *
99282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * @param value to compute the exponential of
100282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * @return the exponential of value
101282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
102282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @LayoutlibDelegate
103282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*package*/ static float exp(float value) {
104282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return (float)Math.exp(value);
105282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
106282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
107282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /**
108282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Returns the closest float approximation of the result of raising {@code
109282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * x} to the power of {@code y}.
110282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     *
111282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * @param x the base of the operation.
112282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * @param y the exponent of the operation.
113282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * @return {@code x} to the power of {@code y}.
114282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
115282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @LayoutlibDelegate
116282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*package*/ static float pow(float x, float y) {
117282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return (float)Math.pow(x, y);
118282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
119282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
120282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /**
121282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Returns {@code sqrt(}<i>{@code x}</i><sup>{@code 2}</sup>{@code +} <i>
122282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * {@code y}</i><sup>{@code 2}</sup>{@code )}.
123282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     *
124282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * @param x a float number
125282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * @param y a float number
126282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * @return the hypotenuse
127282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
128282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @LayoutlibDelegate
129282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*package*/ static float hypot(float x, float y) {
130282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return (float)Math.sqrt(x*x + y*y);
131282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
132282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}
133