use LRUSet to skip already seen event processing
This commit is contained in:
23
packages/shared/src/LRUSet.ts
Normal file
23
packages/shared/src/LRUSet.ts
Normal file
@ -0,0 +1,23 @@
|
||||
export default class LRUSet<T> {
|
||||
private set = new Set<T>();
|
||||
private limit: number;
|
||||
|
||||
constructor(limit: number) {
|
||||
this.limit = limit;
|
||||
}
|
||||
|
||||
add(item: T) {
|
||||
if (this.set.size >= this.limit) {
|
||||
this.set.delete(this.set.values().next().value);
|
||||
}
|
||||
this.set.add(item);
|
||||
}
|
||||
|
||||
has(item: T) {
|
||||
return this.set.has(item);
|
||||
}
|
||||
|
||||
values() {
|
||||
return this.set.values();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user