blob: 8610c84712b344d0b02fd041813f5a6c224c8276 [file] [log] [blame]
// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
base.exportTo('base', function() {
function asArray(arrayish) {
var values = [];
for (var i = 0; i < arrayish.length; i++)
values.push(arrayish[i]);
return values;
}
function compareArrays(x, y, elementCmp) {
var minLength = Math.min(x.length, y.length);
for (var i = 0; i < minLength; i++) {
var tmp = elementCmp(x[i], y[i]);
if (tmp)
return tmp;
}
if (x.length == y.length)
return 0;
if (x[i] === undefined)
return -1;
return 1;
}
/**
* Compares two values when one or both might be undefined. Undefined
* values are sorted after defined.
*/
function comparePossiblyUndefinedValues(x, y, cmp) {
if (x !== undefined && y !== undefined)
return cmp(x, y);
if (x !== undefined)
return -1;
if (y !== undefined)
return 1;
return 0;
}
function concatenateArrays(/*arguments*/) {
var values = [];
for (var i = 0; i < arguments.length; i++) {
if (!(arguments[i] instanceof Array))
throw new Error('Arguments ' + i + 'is not an array');
values.push.apply(values, arguments[i]);
}
return values;
}
function dictionaryKeys(dict) {
var keys = [];
for (var key in dict)
keys.push(key);
return keys;
}
function dictionaryValues(dict) {
var values = [];
for (var key in dict)
values.push(dict[key]);
return values;
}
function iterItems(dict, fn, opt_this) {
opt_this = opt_this || this;
for (var key in dict)
fn.call(opt_this, key, dict[key]);
}
function iterObjectFieldsRecursively(object, func) {
if (!(object instanceof Object))
return;
if (object instanceof Array) {
for (var i = 0; i < object.length; i++) {
func(object, i, object[i]);
iterObjectFieldsRecursively(object[i], func);
}
return;
}
for (var key in object) {
var value = object[key];
func(object, key, value);
iterObjectFieldsRecursively(value, func);
}
}
return {
asArray: asArray,
concatenateArrays: concatenateArrays,
compareArrays: compareArrays,
comparePossiblyUndefinedValues: comparePossiblyUndefinedValues,
dictionaryKeys: dictionaryKeys,
dictionaryValues: dictionaryValues,
iterItems: iterItems,
iterObjectFieldsRecursively: iterObjectFieldsRecursively
};
});