// Copyright (c) 2011 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. cr.define('media', function() { /** * This class stores hashes by their id field and provides basic methods for * iterating over the collection. * @constructor */ function ItemStore() { this.items_ = {}; } ItemStore.prototype = { /** * Get a sorted list of item ids. * @return {Array} A sorted array of ids. */ ids: function() { var ids = []; for (var i in this.items_) ids.push(i); return ids.sort(); }, /** * Add an item to the store. * @param {Object} item The item to be added. * @param {string} item.id The id of the item. */ addItem: function(item) { this.items_[item.id] = item; }, /** * Add a dictionary of items to the store. * @param {Object} items A dictionary of individual items. The keys are * irrelevant but each must have an id field. */ addItems: function(items) { for (id in items) this.addItem(items[id]); }, /** * Remove an item from the store. * @param {string} id The id of the item to be removed. */ removeItem: function(id) { delete this.items_[id]; }, /** * Map this itemStore to an Array. Items are sorted by id. * @param {function(*)} mapper The mapping function applied to each item. * @return {Array} An array of mapped items. */ map: function(mapper) { var items = this.items_; var ids = this.ids(); return ids.map(function(id) { return mapper(items[id]); }); } }; return { ItemStore: ItemStore }; });