Files
shaka-player/lib/util/multi_map.js
T
Joey Parrish 64896d70b0 Use shorter license header
This reflects changes in Google's policy on JavaScript license
headers, which should be smaller to avoid increasing the size of the
binary unnecessarily.

This also updates the company name from "Google, Inc" to "Google LLC".

Change-Id: I3f8b9ed3700b6351f43173d50c94d35c333e82b4
2019-11-22 18:18:36 +00:00

90 lines
1.6 KiB
JavaScript

/** @license
* Copyright 2016 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
goog.provide('shaka.util.MultiMap');
/**
* @summary A simple multimap template.
* @template T
*/
shaka.util.MultiMap = class {
constructor() {
/** @private {!Object.<string, !Array.<T>>} */
this.map_ = {};
}
/**
* Add a key, value pair to the map.
* @param {string} key
* @param {T} value
*/
push(key, value) {
if (this.map_.hasOwnProperty(key)) {
this.map_[key].push(value);
} else {
this.map_[key] = [value];
}
}
/**
* Get a list of values by key.
* @param {string} key
* @return {Array.<T>} or null if no such key exists.
*/
get(key) {
const list = this.map_[key];
// slice() clones the list so that it and the map can each be modified
// without affecting the other.
return list ? list.slice() : null;
}
/**
* Get a list of all values.
* @return {!Array.<T>}
*/
getAll() {
const list = [];
for (const key in this.map_) {
list.push(...this.map_[key]);
}
return list;
}
/**
* Remove a specific value, if it exists.
* @param {string} key
* @param {T} value
*/
remove(key, value) {
if (!(key in this.map_)) {
return;
}
this.map_[key] = this.map_[key].filter((i) => i != value);
}
/**
* Clear all keys and values from the multimap.
*/
clear() {
this.map_ = {};
}
/**
* @param {function(string, !Array.<T>)} callback
*/
forEach(callback) {
for (const key in this.map_) {
callback(key, this.map_[key]);
}
}
};