diff options
author | graehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f> | 2010-07-25 19:32:34 +0000 |
---|---|---|
committer | graehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f> | 2010-07-25 19:32:34 +0000 |
commit | fe91371a77ec43cc08d284ac49f00af8baa1a298 (patch) | |
tree | 0cad767686d6522d10c288d274dd358bd054ee65 /decoder/hg.h | |
parent | 410cc38baef914cdc0841a2e8d5a84098e48be49 (diff) |
fixed CreateViterbiHypergraph (old impl did not work), so --show_derivation works
git-svn-id: https://ws10smt.googlecode.com/svn/trunk@408 ec762483-ff6d-05da-a07a-a48fb63a330f
Diffstat (limited to 'decoder/hg.h')
-rw-r--r-- | decoder/hg.h | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/decoder/hg.h b/decoder/hg.h index 90ae0935..10a24910 100644 --- a/decoder/hg.h +++ b/decoder/hg.h @@ -6,8 +6,8 @@ #define USE_INFO_EDGE 1 #if USE_INFO_EDGE # include <sstream> -# define INFO_EDGE(e,msg) do { std::ostringstream &o=const_cast<std::ostringstream &>(e.info_);o<<msg; } while(0) -# define INFO_EDGEw(e,msg) do { std::ostringstream &o=const_cast<std::ostringstream &>(e.info_);if (o.empty()) o<<' ';o<<msg; } while(0) +# define INFO_EDGE(e,msg) do { std::ostringstream &o=(e.info_);o<<msg; } while(0) +# define INFO_EDGEw(e,msg) do { std::ostringstream &o(e.info_);if (o.empty()) o<<' ';o<<msg; } while(0) #else # define INFO_EDGE(e,msg) # define INFO_EDGEw(e,msg) @@ -60,8 +60,8 @@ public: void copy_reindex(Node const& o,indices_after const& n2,indices_after const& e2) { copy_fixed(o); id_=n2[id_]; - e2.copy_to(in_edges_,o.in_edges_); - e2.copy_to(out_edges_,o.out_edges_); + e2.reindex_push_back(o.in_edges_,in_edges_); + e2.reindex_push_back(o.out_edges_,out_edges_); } }; @@ -104,19 +104,21 @@ public: copy_fixed(o); head_node_=n2[o.head_node_]; id_=e2[o.id_]; - n2.copy_to(tail_nodes_,o.tail_nodes_); + n2.reindex_push_back(o.tail_nodes_,tail_nodes_); } #if USE_INFO_EDGE - mutable std::ostringstream info_; + std::ostringstream info_; Edge(Edge const& o) : head_node_(o.head_node_),tail_nodes_(o.tail_nodes_),rule_(o.rule_),feature_values_(o.feature_values_),edge_prob_(o.edge_prob_),id_(o.id_),i_(o.i_),j_(o.j_),prev_i_(o.prev_i_),prev_j_(o.prev_j_), info_(o.info_.str()) { } void operator=(Edge const& o) { head_node_ = o.head_node_; tail_nodes_ = o.tail_nodes_; rule_ = o.rule_; feature_values_ = o.feature_values_; edge_prob_ = o.edge_prob_; id_ = o.id_; i_ = o.i_; j_ = o.j_; prev_i_ = o.prev_i_; prev_j_ = o.prev_j_; info_.str(o.info_.str()); } std::string info() const { return info_.str(); } + void reset_info() { info_.str(""); info_.clear(); } #else std::string info() const { return std::string(); } + void reset_info() { } #endif void show(std::ostream &o,unsigned mask=SPAN|RULE) const { o<<'{'; @@ -387,7 +389,7 @@ public: const EdgeMask* prune_edges = NULL); void set_ids(); // resync edge,node .id_ - void check_ids(); // assert that .id_ have been kept in sync + void check_ids() const; // assert that .id_ have been kept in sync private: Hypergraph(int num_nodes, int num_edges, bool is_lc) : is_linear_chain_(is_lc), nodes_(num_nodes), edges_(num_edges) {} |