PairNode.java

package edu.udel.cis.vsl.tass.ast.impl;

import edu.udel.cis.vsl.tass.ast.IF.AbstractSyntaxTreeIF;

import edu.udel.cis.vsl.tass.ast.IF.PairNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.ASTNodeIF;


import edu.udel.cis.vsl.tass.ast.IF.SequenceNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.FileNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.declaration.FunctionDeclarationNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.GlobalScopeNodeIF;

import java.util.NoSuchElementException;

import java.io.PrintWriter;

public class PairNode<S extends ASTNodeIF, T extends ASTNodeIF>
    extends ASTNode implements PairNodeIF<S,T> {

    private S left;
    
    private T right;

    public PairNode(long id) {
        super(id);
    }

    @Override
    public S left() {
        return left;
    }

    @Override
    public T right() {
        return right;
    }

    @Override
    public void setLeft(S left) {
        this.left = left;
    }

    @Override
    public void setRight(T right) {
        this.right = right;
    }

    @Override
    public int numChildren() {
        return 2;
    }

    @Override
    public ASTNodeIF child(int index) throws NoSuchElementException {
        switch (index) {
        case 0:
            return left;
        case 1:
            return right;
        default:
            throw new NoSuchElementException("Node " + id()
                                             + " does not have a child with index " + index + ".");
        }
    }

    @Override
    public void setChild(int i, ASTNodeIF child) throws NoSuchElementException {
        switch (i) {
        case 0:
            this.left = (S)child;
            break;
        case 1:
            this.right = (T)child;
            break;
        default:
            throw new NoSuchElementException("Node " + id()
                                             + " does not have a child with index " + i + ".");
        }
    }
        
    @Override
    protected String nodeType() {
        return "Pair";
    }

    @Override
    public void toXml(String prefix, PrintWriter out,AbstractSyntaxTreeIF ast) {
        super.toXml(prefix,out,ast);
    }
}