From 6b00a98deed65f8068bcc6f5b5bb3a3a7bd4cfa2 Mon Sep 17 00:00:00 2001
From: Chris Dyer <cdyer@allegro.clab.cs.cmu.edu>
Date: Wed, 9 Apr 2014 01:06:33 -0400
Subject: don't hash on an internal id

---
 decoder/node_state_hash.h | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

(limited to 'decoder')

diff --git a/decoder/node_state_hash.h b/decoder/node_state_hash.h
index cdc05877..9fc01a09 100644
--- a/decoder/node_state_hash.h
+++ b/decoder/node_state_hash.h
@@ -3,14 +3,19 @@
 
 #include <cassert>
 #include <cstring>
+#include "tdict.h"
 #include "murmur_hash3.h"
 #include "ffset.h"
 
 namespace cdec {
 
   struct FirstPassNode {
-    FirstPassNode(int cat, int i, int j, int pi, int pj) : lhs(cat), s(i), t(j), u(pi), v(pj) {}
-    int32_t lhs;
+    FirstPassNode(int cat, int i, int j, int pi, int pj) : s(i), t(j), u(pi), v(pj) {
+      memset(lhs, 0, 120);
+      unsigned it = 0;
+      for (auto& c : TD::Convert(-cat)) { lhs[it++] = c; if (it == 120) break; }
+    }
+    char lhs[120];
     short s;
     short t;
     short u;
@@ -23,6 +28,7 @@ namespace cdec {
   }
 
   inline uint64_t HashNode(uint64_t old_hash, const FFState& state) {
+    if (state.size() == 0) return old_hash;
     uint8_t buf[1024];
     std::memcpy(buf, &old_hash, sizeof(uint64_t));
     assert(state.size() < (1024u - sizeof(uint64_t)));
-- 
cgit v1.2.3