All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.jarnbjo.vorbis.Util Maven / Gradle / Ivy

/*
 * $ProjectName$
 * $ProjectRevision$
 * -----------------------------------------------------------
 * $Id: Util.java,v 1.3 2003/04/10 19:49:04 jarnbjo Exp $
 * -----------------------------------------------------------
 *
 * $Author: jarnbjo $
 *
 * Description:
 *
 * Copyright 2002-2003 Tor-Einar Jarnbjo
 * -----------------------------------------------------------
 *
 * Change History
 * -----------------------------------------------------------
 * $Log: Util.java,v $
 * Revision 1.3  2003/04/10 19:49:04  jarnbjo
 * no message
 *
 * Revision 1.2  2003/03/16 01:11:12  jarnbjo
 * no message
 */
package de.jarnbjo.vorbis;

final public class Util {
    /**
     * A private constructor to inhibit instantiation of this class.
     */
    private Util() {
    }

    public static int ilog(int x) {
        int res = 0;
        while (x > 0) {
            x >>= 1;
            ++res;
        }

        return res;
    }

    public static float float32unpack(int x) {
        float mantissa = x & 0x1fffff;
        float e = (x & 0x7fe00000) >> 21;
        if ((x & 0x80000000) != 0) {
            mantissa = -mantissa;
        }
        return mantissa * (float) Math.pow(2.0, e - 788.0);
    }

    public static int lookup1Values(int a, int b) {
        int res = (int) Math.pow(Math.E, Math.log(a) / b);
        return intPow(res + 1, b) <= a ? res + 1 : res;
    }

    public static int intPow(int base, int e) {
        int res = 1;
        while (e > 0) {
            res *= base;
            --e;
        }

        return res;
    }

    public static boolean isBitSet(int value, int bit) {
        return (value & (1 << bit)) != 0;
    }

    public static int icount(int value) {
        int res = 0;
        while (value > 0) {
            res += value & 1;
            value >>= 1;
        }
        return res;
    }

    public static int lowNeighbour(int[] v, int x) {
        int max = -1, n = 0;
        for (int i = 0; i < v.length && i < x; i++) {
            if (v[i] > max && v[i] < v[x]) {
                max = v[i];
                n = i;
            }
        }
        return n;
    }

    public static int highNeighbour(int[] v, int x) {
        int min = Integer.MAX_VALUE, n = 0;
        for (int i = 0; i < v.length && i < x; i++) {
            if (v[i] < min && v[i] > v[x]) {
                min = v[i];
                n = i;
            }
        }
        return n;
    }

    public static int renderPoint(int x0, int x1, int y0, int y1, int x) {
        int dy = y1 - y0;
        int ady = dy < 0 ? -dy : dy;
        int off = (ady * (x - x0)) / (x1 - x0);
        return dy < 0 ? y0 - off : y0 + off;
    }

    public static void renderLine(final int x0, final int y0, final int x1,
            final int y1, final float[] v) {
        final int dy = y1 - y0;
        final int adx = x1 - x0;
        final int base = dy / adx;
        final int sy = dy < 0 ? base - 1 : base + 1;
        int x = x0;
        int y = y0;
        int err = 0;
        final int ady = (dy < 0 ? -dy : dy)
                - (base > 0 ? base * adx : -base * adx);

        v[x] *= Floor.DB_STATIC_TABLE[y];
        for (x = x0 + 1; x < x1; x++) {
            err += ady;
            if (err >= adx) {
                err -= adx;
                v[x] *= Floor.DB_STATIC_TABLE[y += sy];
            } else {
                v[x] *= Floor.DB_STATIC_TABLE[y += base];
            }
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy