codev / src /ink-picture /utils /generateKittyId.ts
chenbhao's picture
refactor: integrate ink-picture as source directory
7e3630c
Raw
History Blame Contribute Delete
1.45 kB
/**
* Generates unique IDs for Kitty image rendering.
*/
const MIN_ID = 1048576;
const MAX_ID = 16777216;
class KittyIdGenerator {
private currentId = MIN_ID;
private freedIds = new Set<number>();
generateId(): number {
// Reuse freed ID if available
if (this.freedIds.size > 0) {
const result = this.freedIds.values().next();
if (result.done) {
throw new Error(
"Kitty ID reuse error: Set iterator unexpectedly empty",
);
}
const reusedId = result.value;
this.freedIds.delete(reusedId);
return reusedId;
}
// Generate new sequential ID
if (this.currentId >= MAX_ID) {
throw new Error("Kitty ID overflow: Maximum ID value reached");
}
return this.currentId++;
}
freeId(id: number): boolean {
// Validate ID is in our managed range and was previously allocated
if (id >= MIN_ID && id < this.currentId) {
return this.freedIds.add(id).size > this.freedIds.size - 1;
}
return false;
}
// Utility methods
getActiveIdCount(): number {
return this.currentId - MIN_ID - this.freedIds.size;
}
getAvailableIdCount(): number {
return MAX_ID - this.currentId + this.freedIds.size;
}
}
// Export singleton instance
const generator = new KittyIdGenerator();
export const generateId = () => generator.generateId();
export const freeId = (id: number) => generator.freeId(id);
export default generateId;