From f219bab21c07d02e7e54d557e23387bd93c9ce5f Mon Sep 17 00:00:00 2001 From: Patrick Simianer Date: Sat, 19 Jul 2014 08:30:43 +0200 Subject: hg io --- fast/hypergraph.hh | 110 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 64 insertions(+), 46 deletions(-) (limited to 'fast/hypergraph.hh') diff --git a/fast/hypergraph.hh b/fast/hypergraph.hh index 68cca19..2e30911 100644 --- a/fast/hypergraph.hh +++ b/fast/hypergraph.hh @@ -1,5 +1,4 @@ -#ifndef HYPERGRAPH_HH -#define HYPERGRAPH_HH +#pragma once #include "grammar.hh" #include "semiring.hh" @@ -12,8 +11,10 @@ #include #include #include +#include -#include "msgpack-c/include/msgpack.hpp" +#include "dummyvector.h" +#include using namespace std; @@ -23,61 +24,78 @@ typedef double weight_t; namespace Hg { -class Node; +struct Node; -class Edge { - public: - Node* head; - vector tails; - score_t score; - //Grammar::Rule rule; FIXME - vector f; - unsigned int arity; - unsigned int mark; +struct Edge { + Node* head; + vector tails; + score_t score; + string rule; //FIXME + DummyVector f; //FIXME + unsigned int arity; + unsigned int mark; - bool is_marked(); - friend std::ostream& operator<<(std::ostream& os, const Edge& s); + bool is_marked(); + friend std::ostream& operator<<(std::ostream& os, const Edge& s); - size_t head_id_; - vector tails_ids_; // node ids - MSGPACK_DEFINE(head_id_, tails_ids_, score, f, arity); + size_t head_id_; + vector tails_ids_; // node ids + + MSGPACK_DEFINE(head_id_, tails_ids_, score, f, arity); }; -class Node { - public: - size_t id; - string symbol; - unsigned short left; - unsigned short right; - score_t score; - vector incoming; - vector outgoing; - unsigned int mark; - - bool is_marked(); - friend std::ostream& operator<<(std::ostream& os, const Node& n); - - vector incoming_ids_; // edge ids - vector outgoing_ids_; // edge ids - MSGPACK_DEFINE(id, symbol, left, right, score, incoming_ids_, outgoing_ids_); +struct Node { + size_t id; + string symbol; + unsigned short left; + unsigned short right; + score_t score; + vector incoming; + vector outgoing; + unsigned int mark; + + bool is_marked(); + friend std::ostream& operator<<(std::ostream& os, const Node& n); + + vector incoming_ids_; // edge ids + vector outgoing_ids_; // edge ids + MSGPACK_DEFINE(id, symbol, left, right, score, incoming_ids_, outgoing_ids_); }; -class Hypergraph { - public: - list nodes; - vector edges; - unordered_map nodes_by_id; - unsigned int arity; +struct Hypergraph { + list nodes; + vector edges; + unordered_map nodes_by_id; + unsigned int arity; - void reset(); - void add_node(Node* n) { nodes.push_back(n); nodes_by_id[n->id] = n; } + void add_node(Node* n) { nodes.push_back(n); nodes_by_id[n->id] = n; } }; -void topological_sort(list& nodes, list::iterator root); -void viterbi(Hypergraph& hg); +void +reset(); + +template void +init(list& nodes, list::iterator root, Semiring& semiring); + +void +topological_sort(list& nodes, list::iterator root); + +void +viterbi(Hypergraph& hg); + +namespace io { +void +read(Hypergraph& hg, string fn); + +void +write(Hypergraph& hg, string fn); + +void +manual(Hypergraph& hg); } // namespace -#endif + +} // namespace -- cgit v1.2.3