binary-decision-diagram
Version:
A library to create, minimize and optimize binary decision diagrams
52 lines (41 loc) • 1.05 kB
text/typescript
import type {
NonLeafNode,
NonRootNode
} from './types.js';
/**
* represents the parents of a single node
*/
export class Parents {
private parents: Set<NonLeafNode> = new Set();
constructor(
public node: NonRootNode
) { }
public remove(node: NonLeafNode) {
this.parents.delete(node);
if (this.parents.size === 0) {
this.node.remove();
}
}
public getAll(): NonLeafNode[] {
return Array.from(this.parents);
}
public add(node: NonLeafNode) {
if (this.node.level === node.level) {
throw new Error('a node cannot be parent of a node with the same level');
}
this.parents.add(node);
}
public has(node: NonLeafNode) {
return this.parents.has(node);
}
toString() {
const ret: string[] = [];
for (const parent of this.parents) {
ret.push(parent.id);
}
return ret.join(', ');
}
get size(): number {
return this.parents.size;
}
}