diff options
Diffstat (limited to '')
-rw-r--r-- | llparse-frontend/src/utils/identifier.ts | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/llparse-frontend/src/utils/identifier.ts b/llparse-frontend/src/utils/identifier.ts new file mode 100644 index 0000000..c9ba6ad --- /dev/null +++ b/llparse-frontend/src/utils/identifier.ts @@ -0,0 +1,32 @@ +export interface IUniqueName { + readonly name: string; + readonly originalName: string; +} + +export class Identifier { + private readonly ns: Set<string> = new Set(); + + constructor(private readonly prefix: string = '', + private readonly postfix: string = '') { + } + + public id(name: string): IUniqueName { + let target = this.prefix + name + this.postfix; + if (this.ns.has(target)) { + let i = 1; + for (; i < this.ns.size; i++) { + if (!this.ns.has(target + '_' + i)) { + break; + } + } + + target += '_' + i; + } + + this.ns.add(target); + return { + name: target, + originalName: name, + }; + } +} |