summaryrefslogtreecommitdiff
path: root/decoder/node_state_hash.h
diff options
context:
space:
mode:
authorChris Dyer <cdyer@allegro.clab.cs.cmu.edu>2014-04-09 01:06:33 -0400
committerChris Dyer <cdyer@allegro.clab.cs.cmu.edu>2014-04-09 01:06:33 -0400
commit6b00a98deed65f8068bcc6f5b5bb3a3a7bd4cfa2 (patch)
treed54e0384bf9c05aee0811a181b085fce0c8b836a /decoder/node_state_hash.h
parent71c1f8b274e4f0e83252fe3c68fb45c5ec4069e6 (diff)
don't hash on an internal id
Diffstat (limited to 'decoder/node_state_hash.h')
-rw-r--r--decoder/node_state_hash.h10
1 files changed, 8 insertions, 2 deletions
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)));