#ifndef READER_H_ #define READER_H_ #include #include #include "db.h" // reader for PGF files class PGF_INTERNAL_DECL PgfReader { public: PgfReader(std::istream *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_name_internal((size_t) &(((V*) NULL)->*field)); }; ref read_name() { return read_name_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)()); template ref read_vector(PgfVector 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) { *r = read_expr(); }; void read_hypo(ref hypo); ref read_type(); ref read_flag(); PgfPatt read_patt(); void read_patt2(ref r) { *r = read_patt(); }; void read_defn(ref> defn); ref read_absfun(); ref read_abscat(); void read_abstract(ref abstract); ref read_pgf(); private: std::istream *in; object read_name_internal(size_t struct_size); object read_text_internal(size_t struct_size); }; #endif