Upstream version 11.39.266.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / third_party / tvcm / src / tvcm / iteration_helpers.html
1 <!DOCTYPE html>
2 <!--
3 Copyright (c) 2014 The Chromium Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style license that can be
5 found in the LICENSE file.
6 -->
7 <link rel="import" href="/tvcm.html">
8 <script>
9 'use strict';
10
11 tvcm.exportTo('tvcm', function() {
12   function asArray(arrayish) {
13     var values = [];
14     for (var i = 0; i < arrayish.length; i++)
15       values.push(arrayish[i]);
16     return values;
17   }
18
19   function compareArrays(x, y, elementCmp) {
20     var minLength = Math.min(x.length, y.length);
21     for (var i = 0; i < minLength; i++) {
22       var tmp = elementCmp(x[i], y[i]);
23       if (tmp)
24         return tmp;
25     }
26     if (x.length == y.length)
27       return 0;
28
29     if (x[i] === undefined)
30       return -1;
31
32     return 1;
33   }
34
35   /**
36    * Compares two values when one or both might be undefined. Undefined
37    * values are sorted after defined.
38    */
39   function comparePossiblyUndefinedValues(x, y, cmp) {
40     if (x !== undefined && y !== undefined)
41       return cmp(x, y);
42     if (x !== undefined)
43       return -1;
44     if (y !== undefined)
45       return 1;
46     return 0;
47   }
48
49   function concatenateArrays(/*arguments*/) {
50     var values = [];
51     for (var i = 0; i < arguments.length; i++) {
52       if (!(arguments[i] instanceof Array))
53         throw new Error('Arguments ' + i + 'is not an array');
54       values.push.apply(values, arguments[i]);
55     }
56     return values;
57   }
58
59   function concatenateObjects(/*arguments*/) {
60     var result = {};
61     for (var i = 0; i < arguments.length; i++) {
62       var object = arguments[i];
63       for (var j in object) {
64         result[j] = object[j];
65       }
66     }
67     return result;
68   }
69
70   function dictionaryKeys(dict) {
71     var keys = [];
72     for (var key in dict)
73       keys.push(key);
74     return keys;
75   }
76
77   function dictionaryValues(dict) {
78     var values = [];
79     for (var key in dict)
80       values.push(dict[key]);
81     return values;
82   }
83
84   function dictionaryLength(dict) {
85     var n = 0;
86     for (var key in dict)
87       n++;
88     return n;
89   }
90
91   function iterItems(dict, fn, opt_this) {
92     opt_this = opt_this || this;
93     for (var key in dict)
94       fn.call(opt_this, key, dict[key]);
95   }
96
97   function iterObjectFieldsRecursively(object, func) {
98     if (!(object instanceof Object))
99       return;
100
101     if (object instanceof Array) {
102       for (var i = 0; i < object.length; i++) {
103         func(object, i, object[i]);
104         iterObjectFieldsRecursively(object[i], func);
105       }
106       return;
107     }
108
109     for (var key in object) {
110       var value = object[key];
111       func(object, key, value);
112       iterObjectFieldsRecursively(value, func);
113     }
114   }
115
116   function identity(d) {
117     return d;
118   }
119
120   function findFirstIndexInArray(ary, opt_func, opt_this) {
121     var func = opt_func || identity;
122     for (var i = 0; i < ary.length; i++) {
123       if (func.call(opt_this, ary[i], i))
124         return i;
125     }
126     return -1;
127   }
128
129   function findFirstInArray(ary, opt_func, opt_this) {
130     var i = findFirstIndexInArray(ary, opt_func, opt_func);
131     if (i === -1)
132       return undefined;
133     return ary[i];
134   }
135
136   return {
137     asArray: asArray,
138     concatenateArrays: concatenateArrays,
139     concatenateObjects: concatenateObjects,
140     compareArrays: compareArrays,
141     comparePossiblyUndefinedValues: comparePossiblyUndefinedValues,
142     dictionaryLength: dictionaryLength,
143     dictionaryKeys: dictionaryKeys,
144     dictionaryValues: dictionaryValues,
145     iterItems: iterItems,
146     iterObjectFieldsRecursively: iterObjectFieldsRecursively,
147     findFirstIndexInArray: findFirstIndexInArray,
148     findFirstInArray: findFirstInArray
149   };
150 });
151 </script>