/*
* Copyright (c) 2004-2009, Jean-Marc François. All Rights Reserved.
* Licensed under the New BSD license. See the LICENSE file.
*/
package be.ac.ulg.montefiore.run.jahmm.io;
import java.io.IOException;
import java.io.StreamTokenizer;
import be.ac.ulg.montefiore.run.jahmm.ObservationReal;
/**
* Reads an {@link be.ac.ulg.montefiore.run.jahmm.ObservationReal
* ObservationReal} up to (and including) a semi-colon.
* <p>
* The format of this observation is a simple real number
* (following the format [+-]?[0123456789]+[.]?[0123456789]*, <i>e.g.</i>
* 12.3).
* <p>
* For example, reading
* <pre>76.3;</pre>
* creates an observation such as the one generated by
* <code>new ObservationReal(76.3);</code>
*/
public class ObservationRealReader
extends ObservationReader<ObservationReal>
{
/**
* Reads an {@link be.ac.ulg.montefiore.run.jahmm.ObservationReal
* ObservationReal} reader, as explained in
* {@link ObservationReader ObservationReader}.
*
* @param st A stream tokenizer.
* @return The {@link be.ac.ulg.montefiore.run.jahmm.ObservationReal
* ObservationReal} read.
*/
public ObservationReal read(StreamTokenizer st)
throws IOException, FileFormatException
{
ObservationReal or;
switch (st.nextToken()) {
case StreamTokenizer.TT_EOL:
case StreamTokenizer.TT_EOF:
case StreamTokenizer.TT_WORD:
throw new FileFormatException("Real value expected");
case StreamTokenizer.TT_NUMBER:
or = new ObservationReal(st.nval);
break;
default:
throw new FileFormatException("Real value expected");
}
switch (st.nextToken()) {
case ';':
break;
default:
if (st.ttype != ';')
throw new FileFormatException("';' expected");
}
return or;
}
}