#ifndef READER_H_ #define READER_H_ #include "db.h" // reader for PGF files class PGF_INTERNAL_DECL PgfReader { public: PgfReader(FILE *in); uint8_t read_uint8(); uint16_t read_u16be(); uint64_t read_u64be(); double read_double(); uint64_t read_uint(); int64_t read_int() { return (int64_t) read_uint(); }; size_t read_len() { return (size_t) read_uint(); }; uint8_t read_tag() { return read_uint8(); } template ref read_name(PgfText V::* field) { return read_text_internal((size_t) &(((V*) NULL)->*field)); }; ref read_name() { return read_text_internal(0); }; template ref read_text(PgfText V::* field) { return read_text_internal((size_t) &(((V*) NULL)->*field)); }; ref read_text() { return read_text_internal(0); }; template Namespace read_namespace(ref (PgfReader::*read_value)(), size_t len); template Namespace read_namespace(ref (PgfReader::*read_value)()); template void merge_namespace(ref (PgfReader::*read_value)()); template ref read_vector(Vector C::* field, void (PgfReader::*read_value)(ref val)); template ref> read_vector(void (PgfReader::*read_value)(ref val)); PgfLiteral read_literal(); PgfExpr read_expr(); void read_expr(ref r) { auto res = read_expr(); *r = res; }; void read_hypo(ref hypo); ref read_type(); ref read_flag(); ref read_absfun(); ref read_abscat(); void read_abstract(ref abstract); void merge_abstract(ref abstract); ref read_lincat(); ref read_lparam(); void read_variable_range(ref var_info); void read_parg(ref parg); ref read_presult(); PgfSymbol read_symbol(); ref read_seq(); ref>> read_seq_ids(object container); PgfPhrasetable read_phrasetable(size_t len); PgfPhrasetable read_phrasetable(); ref read_lin(); ref read_printname(); ref read_concrete(); ref read_pgf(); void merge_pgf(ref pgf); private: FILE *in; ref abstract; ref concrete; object read_name_internal(size_t struct_size); object read_text_internal(size_t struct_size); void read_text2(ref> r) { auto text = read_text(); *r = text; } void read_lparam(ref> r) { auto lparam = read_lparam(); *r = lparam; } void read_presult2(ref> r) { auto res = read_presult(); *r = res; } template ref read_symbol_idx(); }; #endif