summaryrefslogtreecommitdiff
path: root/js/src/Ice/ArrayUtil.js
blob: c13ed94162b5399577558071c67098bb4512a91a (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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// **********************************************************************
//
// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
//
// This copy of Ice is licensed to you under the terms described in the
// ICE_LICENSE file included in this distribution.
//
// **********************************************************************
    
var Ice = require("../Ice/ModuleRegistry").Ice;
var __M = Ice.__M;
var Slice = Ice.Slice;

Ice.ArrayUtil =
{
    clone: function(arr)
    {
        if(arr === undefined)
        {
            return arr;
        }
        else if(arr === null)
        {
            return [];
        }
        else
        {
            return arr.slice();
        }
    },
    equals: function(v1, v2, equalFn)
    {
        var i, length;
        
        if(v1.length != v2.length)
        {
            return false;
        }

        if(equalFn !== undefined && equalFn !== null)
        {
            for(i = 0, length = v1.length; i < length; ++i)
            {
                if(!equalFn.call(equalFn, v1[i], v2[i]))
                {
                    return false;
                }
            }
        }
        else
        {
            for(i = 0, length = v1.length; i < length; ++i)
            {
                if(v1[i] != v2[i])
                {
                    return false;
                }
            }
        }

        return true;
    },
    shuffle: function(arr)
    {
        for(var i = arr.length; i > 1; --i)
        {
            var e = arr[i - 1];
            var rand = Math.floor(Math.random() * i);
            arr[i - 1] = arr[rand];
            arr[rand] = e;
        }
    },
    indexOf: function(arr, elem, equalFn)
    {
        if(equalFn !== undefined && equalFn !== null)
        {
            for(var i = 0; i < arr.length; ++i)
            {
                if(equalFn.call(equalFn, arr[i], elem))
                {
                    return i;
                }
            }
        }
        else
        {
            return arr.indexOf(elem);
        }

        return -1;
    },
    filter: function(arr, includeFn, obj)
    {
        obj = obj === undefined ? includeFn : obj;
        var result = [];
        for(var i = 0; i < arr.length; ++i)
        {
            if(includeFn.call(obj, arr[i], i, arr))
            {
                result.push(arr[i]);
            }
        }
        return result;
    }
};

Slice.defineSequence = function(module, name, valueHelper, fixed, elementType)
{
    var helper = null;
    Object.defineProperty(module, name, 
    {
        get: function()
            {
                if(helper === null)
                {
                    /*jshint -W061 */
                    helper = Ice.StreamHelpers.generateSeqHelper(__M.type(valueHelper), fixed, __M.type(elementType));
                    /*jshint +W061 */
                }
                return helper;
            }
    });
};
module.exports.Ice = Ice;