| // 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. |
| export class CharacterIdMap { |
| /** @type {!Map<T, string>} */ |
| this._elementToCharacter = new Map(); |
| /** @type {!Map<string, T>} */ |
| this._characterToElement = new Map(); |
| let character = this._elementToCharacter.get(object); |
| 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); |
| * @param {string} character |
| const object = this._characterToElement.get(character); |
| if (object === undefined) { |