blob: 042f76429e280a478d7b1bbc601c4d9f5e0fed15 [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
*/
export class CharacterIdMap {
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;
}
}