10ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska/*
20ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * Copyright (C) 2016 The Android Open Source Project
30ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska *
40ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * Licensed under the Apache License, Version 2.0 (the "License");
50ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * you may not use this file except in compliance with the License.
60ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * You may obtain a copy of the License at
70ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska *
80ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska *      http://www.apache.org/licenses/LICENSE-2.0
90ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska *
100ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * Unless required by applicable law or agreed to in writing, software
110ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * distributed under the License is distributed on an "AS IS" BASIS,
120ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * See the License for the specific language governing permissions and
140ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * limitations under the License.
150ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska */
160ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska
17ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.core.math;
180ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska
190ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska/**
200ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska * A utility class providing functions useful for common mathematical operations.
210ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska */
220ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurskapublic class MathUtils {
230ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska
2413efcaab3f643a7cfb81ff5583fe6ea4d509afe4Aga Madurska    private MathUtils() {}
2513efcaab3f643a7cfb81ff5583fe6ea4d509afe4Aga Madurska
260ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska    /**
270ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * This method takes a numerical value and ensures it fits in a given numerical range. If the
280ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * number is smaller than the minimum required by the range, then the minimum of the range will
290ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * be returned. If the number is higher than the maximum allowed by the range then the maximum
300ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * of the range will be returned.
310ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     *
320ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * @param value the value to be clamped.
330ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * @param min minimum resulting value.
340ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * @param max maximum resulting value.
350ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     *
360ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * @return the clamped value.
370ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     */
3813efcaab3f643a7cfb81ff5583fe6ea4d509afe4Aga Madurska    public static float clamp(float value, float min, float max) {
390ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska        if (value < min) {
400ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska            return min;
410ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska        } else if (value > max) {
420ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska            return max;
430ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska        }
440ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska        return value;
450ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska    }
460ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska
470ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska    /**
480ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * This method takes a numerical value and ensures it fits in a given numerical range. If the
490ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * number is smaller than the minimum required by the range, then the minimum of the range will
500ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * be returned. If the number is higher than the maximum allowed by the range then the maximum
510ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * of the range will be returned.
520ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     *
530ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * @param value the value to be clamped.
540ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * @param min minimum resulting value.
550ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * @param max maximum resulting value.
560ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     *
570ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * @return the clamped value.
580ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     */
590ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska    public static double clamp(double value, double min, double max) {
600ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska        if (value < min) {
610ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska            return min;
620ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska        } else if (value > max) {
630ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska            return max;
640ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska        }
650ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska        return value;
660ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska    }
670ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska
680ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska    /**
690ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * This method takes a numerical value and ensures it fits in a given numerical range. If the
700ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * number is smaller than the minimum required by the range, then the minimum of the range will
710ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * be returned. If the number is higher than the maximum allowed by the range then the maximum
720ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * of the range will be returned.
730ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     *
740ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * @param value the value to be clamped.
750ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * @param min minimum resulting value.
760ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * @param max maximum resulting value.
770ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     *
780ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     * @return the clamped value.
790ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska     */
800ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska    public static int clamp(int value, int min, int max) {
810ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska        if (value < min) {
820ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska            return min;
830ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska        } else if (value > max) {
840ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska            return max;
850ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska        }
860ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska        return value;
870ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska    }
880ec2d5a4346652173cc525e9b2492e74407b9470Aga Madurska}
89