Welcome to mirror list, hosted at ThFree Co, Russian Federation.

big_ints.js « js - github.com/phpmyadmin/phpmyadmin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: f50cefb3882877fb83c11a53de3c894814bf4d4f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
 * phpMyAdmin's BigInts library
 */

/**
 * @var BigInts object to handle big integers (in string)
 *      as JS can handle upto 53 bits of precision only.
 */
var BigInts = {

    /**
     * Compares two integer strings
     *
     * @param int1 the string representation of 1st integer
     * @param int2 the string representation of 2nd integer
     *
     * @return int 0 if equal, < 0 if int1 < int2, else > 0
     */
    compare: function(int1, int2) {
        // trim integers
        int1 = int1.trim();
        int2 = int2.trim();
        // length of integer strings
        var len1 = int1.length;
        var len2 = int2.length;
        // integer is -ve or not
        var isNeg1 = (int1[0] === '-');
        var isNeg2 = (int2[0] === '-');
        // Sign of int1 != int2 then no actual comparison
        // is needed we can return result directly
        if (isNeg1 !== isNeg2) {
            return (isNeg1 === true ? -1 : 1);
        }
        // replace - sign with 0
        int1[0] = isNeg1 ? '0' : int1[0];
        int2[0] = isNeg2 ? '0' : int2[0];
        // pad integers with 0 to make them
        // equal length
        int1 = BigInts.lpad(int1, len2);
        int2 = BigInts.lpad(int2, len1);
        // Now they are good to compare as strings
        if (int1 !== int2) {
            return (int1 < int2 ? -1 : 1);
        }
        return 0;
    },

    /**
     * Adds leading zeros to a integer given a total length
     *
     * @param int   the string representation of the integer
     * @param total the total length required
     *
     * @return int the integer of length given with added leading
     *             zeros if necessary
     */
    lpad: function(int, total){
        var len = int.length;
        var pad = '';
        while(len < total) {
            pad += '0';
            len++;
        }
        return (pad + int);
    }
};