CommonStringLiteral.java

package edu.udel.cis.vsl.abc.token.common;

import java.util.ArrayList;

import edu.udel.cis.vsl.abc.token.IF.ExecutionCharacter;
import edu.udel.cis.vsl.abc.token.IF.StringLiteral;

public class CommonStringLiteral implements StringLiteral {

	private StringKind stringKind;

	private ArrayList<ExecutionCharacter> characters;

	public CommonStringLiteral(StringKind kind,
			ArrayList<ExecutionCharacter> characters) {
		this.stringKind = kind;
		this.characters = characters;
	}

	@Override
	public boolean equals(Object object) {
		if (this == object)
			return true;
		if (object instanceof CommonStringLiteral) {
			CommonStringLiteral that = (CommonStringLiteral) object;
			int numChars = getNumCharacters();

			if (stringKind != that.stringKind
					|| getNumCharacters() != that.getNumCharacters())
				return false;
			for (int i = 0; i < numChars; i++) {
				if (!this.getCharacter(i).equals(that.getCharacter(i)))
					return false;
			}
			return true;
		}
		return false;
	}

	@Override
	public int getNumCharacters() {
		return characters.size();
	}

	@Override
	public ExecutionCharacter getCharacter(int index) {
		return characters.get(index);
	}

	@Override
	public StringKind getStringKind() {
		return stringKind;
	}

	@Override
	public String toString() {
		StringBuffer result = new StringBuffer();

		result.append('"');
		for (ExecutionCharacter ec : characters)
			if (ec.getCodePoint() != 0)
				result.append(ec.rawString());
		result.append('"');
		return result.toString();
		// return characters.toString();
	}

}