#ifndef WRITER_H #define WRITER_H class PGF_INTERNAL_DECL PgfWriter { public: PgfWriter(PgfText **langs, FILE *out); void write_uint8(uint8_t b); void write_u16be(uint16_t u); void write_u64be(uint64_t u); void write_double(double d); void write_uint(uint64_t u); void write_int(int64_t i) { write_uint((uint64_t) i); }; void write_len(size_t len) { write_uint((uint64_t) len); }; void write_tag(uint8_t t) { write_uint8(t); } void write_name(PgfText *text) { write_text(text); }; void write_text(PgfText *text); template void write_namespace(Namespace nmsp, void (PgfWriter::*write_value)(ref)); template void write_vector(ref> vec, void (PgfWriter::*write_value)(ref val)); void write_literal(PgfLiteral literal); void write_expr(PgfExpr expr); void write_expr(ref r) { write_expr(*r); }; void write_hypo(ref hypo); void write_type(ref ty); void write_flag(ref flag); void write_absfun(ref absfun); void write_abscat(ref abscat); void write_abstract(ref abstract); void write_lincat(ref lincat); void write_lincat_field(ref field); void write_variable_range(ref var); void write_lparam(ref lparam); void write_parg(ref linarg); void write_presult(ref linres); void write_symbol(PgfSymbol sym); void write_seq(ref seq); void write_seq_id(ref> r) { write_len(seq_ids.get(*r)); }; void write_phrasetable(PgfPhrasetable table); void write_lin(ref lin); void write_printname(ref printname); void write_concrete(ref concr); void write_pgf(ref pgf); private: template void write_namespace_helper(Namespace nmsp, void (PgfWriter::*write_value)(ref)); void write_phrasetable_helper(PgfPhrasetable table); void write_text(ref> r) { write_text(&(**r)); }; void write_lparam(ref> r) { write_lparam(*r); }; void write_symbol(ref r) { write_symbol(*r); }; void write_presult(ref> r) { write_presult(*r); }; FILE *out; PgfText **langs; ref abstract; PgfPhrasetableIds seq_ids; }; #endif