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

class SFieldsParser implements SParser
{
	private static SFieldsParser instance;

	private SFieldsParser()
	{
	}

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

		return instance;
	}

	public Object read(DataInputStream d) throws SClassFileException
	{
	    int i = -1;
	    int fieldsCount;
	    SFields fields;
	    SFieldInfo fieldInfo;

	    fieldsCount = SInputStream.
		readUnsignedShort(d, SConstants.ITEM_FIELDS_COUNT);

	    fields = new SFields(fieldsCount);

	    try {
		for (i = 0; i < fieldsCount; i++) {
			fieldInfo = (SFieldInfo)
				SFieldInfoParser.getInstance().read(d);
			fields.setField(i, fieldInfo);
		}
		return fields;
	    }
	    catch(SClassFileException cfe) {
		throw new SClassFileException("In " + SConstants.ITEM_FIELDS + " " +
					      SExceptionMessages.PARSING_GENERIC_AT_INDEX_MESSAGE +
					      i + "\n" + cfe.getMessage());
	    }
	}

	public void write(DataOutputStream d, Object obj)
		throws SClassFileException
	{
		SFields fields = (SFields) obj;
		int fieldsCount = fields.count();

		SInputStream.writeShort(d, fieldsCount);
		for (int i = 0; i < fieldsCount; i++) {
			
			SFieldInfoParser.getInstance().write(
				d, fields.getField(i));
		}
	}
}
