"use strict"; import type BNote from "../../becca/entities/bnote.js"; class NoteSet { private noteIdSet: Set; notes: BNote[]; sorted: boolean; constructor(notes: BNote[] = []) { this.notes = notes; this.noteIdSet = new Set(notes.map((note) => note.noteId)); this.sorted = false; } add(note: BNote) { if (!this.hasNote(note)) { this.notes.push(note); this.noteIdSet.add(note.noteId); } } addAll(notes: BNote[]) { for (const note of notes) { this.add(note); } } hasNote(note: BNote) { return this.hasNoteId(note.noteId); } hasNoteId(noteId: string) { return this.noteIdSet.has(noteId); } mergeIn(anotherNoteSet: NoteSet) { this.addAll(anotherNoteSet.notes); } minus(anotherNoteSet: NoteSet) { const newNoteSet = new NoteSet(); for (const note of this.notes) { if (!anotherNoteSet.hasNoteId(note.noteId)) { newNoteSet.add(note); } } return newNoteSet; } intersection(anotherNoteSet: NoteSet) { const newNoteSet = new NoteSet(); for (const note of this.notes) { if (anotherNoteSet.hasNote(note)) { newNoteSet.add(note); } } return newNoteSet; } } export default NoteSet;