UNPKG

binary-decision-diagram

Version:

A library to create, minimize and optimize binary decision diagrams

44 lines (35 loc) 1.24 kB
import { Parents } from './parents.js'; import { AbstractNode } from './abstract-node.js'; import { RootNode } from './root-node.js'; import type { NonLeafNode } from './types.js'; import { oppositeBoolean } from './util.js'; import { InternalNode } from './internal-node.js'; export class LeafNode extends AbstractNode { public parents = new Parents(this); constructor( level: number, rootNode: RootNode, public value: number, parent: NonLeafNode ) { super(level, rootNode, 'LeafNode'); this.parents.add(parent); } removeIfValueEquals(value: number): boolean { this.ensureNotDeleted(); if (this.value !== value) { return false; } const parents = this.parents.getAll(); parents.forEach(parent => { const branchKey = parent.branches.getKeyOfNode(this); const otherBranch = parent.branches.getBranch(oppositeBoolean(branchKey)); this.parents.remove(parent); parent.branches.setBranch(branchKey, otherBranch); if (parent.isInternalNode()) { (parent as InternalNode).applyReductionRule(); } }); return true; } }