/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * This source file is part of SableVM.                            *
 *                                                                 *
 * See the file "LICENSE" for the copyright information and for    *
 * the terms and conditions for copying, distribution and          *
 * modification of this source file.                               *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

/**
 * @author Patrick Latifi
 */
import java.io.*;

class SLineNumberTableAttributeParser implements SParser
{
	private static SLineNumberTableAttributeParser instance;

	private SLineNumberTableAttributeParser()
	{
	}

	public static SLineNumberTableAttributeParser getInstance()
	{
		if (instance == null)
			instance = new SLineNumberTableAttributeParser();

		return instance;
	}

	public Object read(DataInputStream d) throws SClassFileException
	{
	    SLineNumbers lineNumbers;
	    
	    try {
		    lineNumbers = (SLineNumbers)
			    SLineNumbersParser.getInstance().read(d);
		    return new SLineNumberTableAttribute(SAttributeInfoParser.
			getInstance().getAttributeNameIndex(),
			SAttributeInfoParser.getInstance().getAttributeLength(),
			lineNumbers);
	    }
	    catch(SClassFileException cfe) {
		throw new SClassFileException(
			"In " + SConstants.LINE_NUMBER_TABLE_ATTRIBUTE + " " +
			cfe.getMessage());
	    }
	}

	public void write(DataOutputStream d, Object obj)
		throws SClassFileException
	{
		SLineNumberTableAttribute attribute =
			(SLineNumberTableAttribute) obj;

		SLineNumbersParser.getInstance().write(d,
			attribute.getLineNumbers());
	}
}
