LiteralStructOrUnionTypeNode.java

package edu.udel.cis.vsl.abc.analysis.entity;

import edu.udel.cis.vsl.abc.ast.type.IF.StructureOrUnionType;

public class LiteralStructOrUnionTypeNode extends LiteralTypeNode {

	private LiteralTypeNode[] memberNodes;

	public LiteralStructOrUnionTypeNode(StructureOrUnionType type,
			LiteralTypeNode[] memberNodes) {
		super(type);
		this.memberNodes = memberNodes;
	}

	@Override
	public StructureOrUnionType getType() {
		return (StructureOrUnionType) super.getType();
	}

	@Override
	public boolean hasFixedLength() {
		return true;
	}

	@Override
	public int length() {
		return memberNodes.length;
	}

	public LiteralTypeNode getMemberNode(int index) {
		return memberNodes[index];
	}

	@Override
	public String toString() {
		String result;
		boolean first = true;

		if (getType().isStruct())
			result = "Struct";
		else
			result = "Union";
		result += "[";
		for (LiteralTypeNode child : memberNodes) {
			if (first)
				first = false;
			else
				result += ",";
			result += child;
		}
		result += "]";
		return result;
	}

	@Override
	public LiteralTypeNode getChild(int index) {
		return getMemberNode(index);
	}

}