blob: 627df761a2187b0d890fe642e84d2c0e0d13df67 [file] [log] [blame]
// Copyright 2016 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.
/**
* @template T
* @unrestricted
*/
Common.CharacterIdMap = class {
constructor() {
/** @type {!Map<T, string>} */
this._elementToCharacter = new Map();
/** @type {!Map<string, T>} */
this._characterToElement = new Map();
this._charCode = 33;
}
/**
* @param {T} object
* @return {string}
*/
toChar(object) {
let character = this._elementToCharacter.get(object);
if (!character) {
if (this._charCode >= 0xFFFF)
throw new Error('CharacterIdMap ran out of capacity!');
character = String.fromCharCode(this._charCode++);
this._elementToCharacter.set(object, character);
this._characterToElement.set(character, object);
}
return character;
}
/**
* @param {string} character
* @return {?T}
*/
fromChar(character) {
const object = this._characterToElement.get(character);
if (object === undefined)
return null;
return object;
}
};