@@ -2,24 +2,17 @@ import { CharSet } from "../char-set";
22import { FABuilder } from "../fa-types";
33import { TooManyNodesError } from "../errors";
44
5- interface Limit {
6- current: number;
7- readonly maxNodes: number;
8- readonly kind: string;
9- }
10-
115/**
126 * An FA builder that uses `Map` objects as nodes. Each node is the map of its outgoing transitions.
137 */
148export class MapFABuilder implements FABuilder<MapFABuilderNode, CharSet> {
15- private readonly _limit: Limit | undefined;
9+ private readonly _limit: number;
10+ private _counter = 0;
1611 readonly initial: MapFABuilderNode = new Map();
1712 readonly finals = new Set<MapFABuilderNode>();
1813
19- constructor(maxNodes: number = Infinity, kind?: string) {
20- if (maxNodes < Infinity) {
21- this._limit = { current: 0, maxNodes, kind: kind ?? "MapFABuilder" };
22- }
14+ constructor(maxNodes: number = Infinity) {
15+ this._limit = maxNodes;
2316 }
2417
2518 makeFinal(state: MapFABuilderNode): void {
@@ -29,10 +22,7 @@ export class MapFABuilder implements FABuilder<MapFABuilderNode, CharSet> {
2922 return this.finals.has(state);
3023 }
3124 createNode(): MapFABuilderNode {
32- const limit = this._limit;
33- if (limit) {
34- TooManyNodesError.assert(++limit.current, limit.maxNodes, limit.kind);
35- }
25+ TooManyNodesError.assert(++this._counter, this._limit, "MapFABuilder");
3626
3727 return new Map();
3828 }
0 commit comments