protected static void read_header_and_symbols(IGenericFst fst, BinaryReader reader)
{
if (read_int32_LE(reader) != OPENFST_MAGIC)
throw new Exception("invalid magic number");
read_magic_string(reader, "vector");
read_magic_string(reader, "standard");
int version = read_int32_LE(reader);
if (version < MIN_VERSION)
throw new Exception("file has too old version");
int flags = read_int32_LE(reader);
read_int64_LE(reader); // properties
Int64 start = read_int64_LE(reader);
Int64 nstates = read_int64_LE(reader);
if (nstates < 0)
return; // to prevent creating 2^31 nodes in case of sudden EOF
fst.Clear();
for (int i = 0; i < nstates; i++)
fst.NewState();
fst.SetStart((int)start);
read_int64_LE(reader); // narcs
if ((flags & FLAG_HAS_ISYMBOLS) > 0)
skip_symbol_table(reader);
if ((flags & FLAG_HAS_OSYMBOLS) > 0)
skip_symbol_table(reader);
}