Nodes

by evgkch

JavaScript

class Operator {
  get prev() {
  	return this._prev;
  }
  get next() {
    return this._next;
  }
	constructor() {
    this._next = [];  
    this._prev = [];
  }
}

class SerialOperator extends Operator {
	set prev(prev) {
  	this._prev.push(prev.nodes[prev.nodes.length - 1]);
  }
  set next(next) {
  	this._next.push(next.nodes[0]);
  }
}

class ParallerOperator extends Operator {
	set prev(prev) {
  	prev.nodes.forEach(this._prev.push);
  }
  set next(next) {
  	next.nodes.forEach(this._next.push);
  }
}

class Node {
	static createSingle({ node }) {
  	return new SingleOperator(node);
  }
  static createSerial({ node, children }) {
  	return new SerialOperator(node, children);
  }
  static createParallel({ node, children }) {
  	return new ParallerOperator(node, children);
  }
};

const structure = {
	type: 0,
	node: null,
  children: [
  	{
    	type: 0,
      node: null,      
    },
    {
    	type: 1,
      node: null,
      children: [
      	{
          type: 0,
          node: null,   
        },
        {
          type: 0,
          node: null,   
        },
        {
          type: 0,
          node: null,   
        },
      ],
    },
    {
    	type: 0,
      node: null,      
    },
  ],
};

const test = structure.map(item => {
	return Array.isArray(item.children)
  	? item.type
    	? Node.createParallel(item)
  		: Node.createSerial(item)
    : Node.createSingle(item)
})