123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import { Debugger } from '../common/debugger.js';
- import { TrieNodeKind } from './trie_node.js';
- export class AbstractTrieNode {
- constructor(constraint, test) {
- this.constraint = constraint;
- this.test = test;
- this.children_ = {};
- this.kind = TrieNodeKind.ROOT;
- }
- getConstraint() {
- return this.constraint;
- }
- getKind() {
- return this.kind;
- }
- applyTest(object) {
- return this.test(object);
- }
- addChild(node) {
- const constraint = node.getConstraint();
- const child = this.children_[constraint];
- this.children_[constraint] = node;
- return child;
- }
- getChild(constraint) {
- return this.children_[constraint];
- }
- getChildren() {
- const children = [];
- for (const val of Object.values(this.children_)) {
- children.push(val);
- }
- return children;
- }
- findChildren(object) {
- const children = [];
- for (const val of Object.values(this.children_)) {
- if (val.applyTest(object)) {
- children.push(val);
- }
- }
- return children;
- }
- removeChild(constraint) {
- delete this.children_[constraint];
- }
- toString() {
- return this.constraint;
- }
- }
- export class StaticTrieNode extends AbstractTrieNode {
- constructor(constraint, test) {
- super(constraint, test);
- this.rule_ = null;
- this.kind = TrieNodeKind.STATIC;
- }
- getRule() {
- return this.rule_;
- }
- setRule(rule) {
- if (this.rule_) {
- Debugger.getInstance().output('Replacing rule ' + this.rule_ + ' with ' + rule);
- }
- this.rule_ = rule;
- }
- toString() {
- const rule = this.getRule();
- return rule
- ? this.constraint + '\n' + '==> ' + this.getRule().action
- : this.constraint;
- }
- }
|