1a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// found in the LICENSE file.
4a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
5a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)/**
6a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) * @fileoverview Some utility functions that don't belong anywhere else in the
7a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) * code.
8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) */
9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)var util = (function() {
11a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  var util = {};
12a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  util.object = {};
13a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  /**
14a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)   * Calls a function for each element in an object/map/hash.
15a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)   *
16a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)   * @param obj The object to iterate over.
17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)   * @param f The function to call on every value in the object.  F should have
18a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)   * the following arguments: f(value, key, object) where value is the value
19a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)   * of the property, key is the corresponding key, and obj is the object that
20a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)   * was passed in originally.
21a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)   * @param optObj The object use as 'this' within f.
22a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)   */
23a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  util.object.forEach = function(obj, f, optObj) {
24a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    'use strict';
25a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    var key;
26a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    for (key in obj) {
27a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      if (obj.hasOwnProperty(key)) {
28a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        f.call(optObj, obj[key], key, obj);
29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      }
30a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    }
31a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  };
32a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
33a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  return util;
34a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}());
35