UNPKG

monaco-editor-core

Version:

A browser based code editor

57 lines (56 loc) 1.85 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { toUint8 } from '../../../base/common/uint.js'; /** * A fast character classifier that uses a compact array for ASCII values. */ export class CharacterClassifier { constructor(_defaultValue) { const defaultValue = toUint8(_defaultValue); this._defaultValue = defaultValue; this._asciiMap = CharacterClassifier._createAsciiMap(defaultValue); this._map = new Map(); } static _createAsciiMap(defaultValue) { const asciiMap = new Uint8Array(256); asciiMap.fill(defaultValue); return asciiMap; } set(charCode, _value) { const value = toUint8(_value); if (charCode >= 0 && charCode < 256) { this._asciiMap[charCode] = value; } else { this._map.set(charCode, value); } } get(charCode) { if (charCode >= 0 && charCode < 256) { return this._asciiMap[charCode]; } else { return (this._map.get(charCode) || this._defaultValue); } } clear() { this._asciiMap.fill(this._defaultValue); this._map.clear(); } } export class CharacterSet { constructor() { this._actual = new CharacterClassifier(0 /* Boolean.False */); } add(charCode) { this._actual.set(charCode, 1 /* Boolean.True */); } has(charCode) { return (this._actual.get(charCode) === 1 /* Boolean.True */); } clear() { return this._actual.clear(); } }