public bool Read()
{
if (end_of_input)
return false;
if (end_of_json) {
end_of_json = false;
automaton_stack.Clear ();
automaton_stack.Push ((int) ParserToken.End);
automaton_stack.Push ((int) ParserToken.Text);
}
parser_in_string = false;
parser_return = false;
token = JsonToken.None;
token_value = null;
if (! read_started) {
read_started = true;
if (! ReadToken ())
return false;
}
int[] entry_symbols;
while (true) {
if (parser_return) {
end_of_json |= automaton_stack.Peek() == (int)ParserToken.End;
return true;
}
current_symbol = automaton_stack.Pop ();
ProcessSymbol ();
if (current_symbol == current_input) {
if (! ReadToken ()) {
if (automaton_stack.Peek () != (int) ParserToken.End)
throw new JsonException (
"Input doesn't evaluate to proper JSON text");
if (parser_return)
return true;
return false;
}
continue;
}
try {
entry_symbols =
parse_table[current_symbol][current_input];
} catch (KeyNotFoundException e) {
throw new JsonException ((ParserToken) current_input, e);
}
if (entry_symbols[0] == (int) ParserToken.Epsilon)
continue;
for (int i = entry_symbols.Length - 1; i >= 0; i--)
automaton_stack.Push (entry_symbols[i]);
}
}
public void DoubleTest() { string json = @"[ 0.0, -0.0, 3.1416, 8e-3, 7E-5, -128.000009, 144e+3, 0.1e2 ]"; JsonReader reader = new JsonReader (json); reader.Read (); reader.Read (); Assert.AreEqual ((double) reader.Value, 0.0, Double.Epsilon, "A1"); reader.Read (); Assert.AreEqual ((double) reader.Value, 0.0, Double.Epsilon, "A2"); reader.Read (); Assert.AreEqual ((double) reader.Value, 3.1416, Double.Epsilon, "A3"); reader.Read (); Assert.AreEqual ((double) reader.Value, 0.008, Double.Epsilon, "A4"); reader.Read (); Assert.AreEqual ((double) reader.Value, 0.00007, Double.Epsilon, "A5"); reader.Read (); Assert.AreEqual ((double) reader.Value, -128.000009, Double.Epsilon, "A6"); reader.Read (); Assert.AreEqual ((double) reader.Value, 144000.0, Double.Epsilon, "A7"); reader.Read (); Assert.AreEqual ((double) reader.Value, 10.0, Double.Epsilon, "A8"); reader.Close (); }