Home | History | Annotate | Download | only in replicaisland
      1 /*
      2  * Copyright (C) 2010 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.replica.replicaisland;
     18 
     19 /** A collection of miscellaneous utility functions. */
     20 public class Utils {
     21     private static final float EPSILON = 0.0001f;
     22 
     23     public final static boolean close(float a, float b) {
     24         return close(a, b, EPSILON);
     25     }
     26 
     27     public final static boolean close(float a, float b, float epsilon) {
     28         return Math.abs(a - b) < epsilon;
     29     }
     30 
     31     public final static int sign(float a) {
     32         if (a >= 0.0f) {
     33             return 1;
     34         } else {
     35             return -1;
     36         }
     37     }
     38 
     39     public final static int clamp(int value, int min, int max) {
     40         int result = value;
     41         if (min == max) {
     42             if (value != min) {
     43                 result = min;
     44             }
     45         } else if (min < max) {
     46             if (value < min) {
     47                 result = min;
     48             } else if (value > max) {
     49                 result = max;
     50             }
     51         } else {
     52             result = clamp(value, max, min);
     53         }
     54 
     55         return result;
     56     }
     57 
     58 
     59     public final static int byteArrayToInt(byte[] b) {
     60         if (b.length != 4) {
     61             return 0;
     62         }
     63 
     64         // Same as DataInputStream's 'readInt' method
     65         /*int i = (((b[0] & 0xff) << 24) | ((b[1] & 0xff) << 16) | ((b[2] & 0xff) << 8)
     66                 | (b[3] & 0xff));*/
     67 
     68         // little endian
     69         int i = (((b[3] & 0xff) << 24) | ((b[2] & 0xff) << 16) | ((b[1] & 0xff) << 8)
     70                 | (b[0] & 0xff));
     71 
     72         return i;
     73     }
     74 
     75     public final static float byteArrayToFloat(byte[] b) {
     76 
     77         // intBitsToFloat() converts bits as follows:
     78         /*
     79         int s = ((i >> 31) == 0) ? 1 : -1;
     80         int e = ((i >> 23) & 0xff);
     81         int m = (e == 0) ? (i & 0x7fffff) << 1 : (i & 0x7fffff) | 0x800000;
     82         */
     83 
     84         return Float.intBitsToFloat(byteArrayToInt(b));
     85     }
     86 
     87     public final static float framesToTime(int framesPerSecond, int frameCount) {
     88         return (1.0f / framesPerSecond) * frameCount;
     89     }
     90 
     91 }
     92