diff options
author | graehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f> | 2010-07-06 22:06:22 +0000 |
---|---|---|
committer | graehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f> | 2010-07-06 22:06:22 +0000 |
commit | 23b16f6589da76f6313c315b5895becb77685c00 (patch) | |
tree | 20f341be1b40ab1db3e12b72d980b6a99abe5464 /decoder | |
parent | 5ad4cc0895a002478184e9e550bc6085ee1d4c5d (diff) |
Boolean semiring
git-svn-id: https://ws10smt.googlecode.com/svn/trunk@166 ec762483-ff6d-05da-a07a-a48fb63a330f
Diffstat (limited to 'decoder')
-rw-r--r-- | decoder/inside_outside.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/decoder/inside_outside.h b/decoder/inside_outside.h index 3c7518f2..9f7ce526 100644 --- a/decoder/inside_outside.h +++ b/decoder/inside_outside.h @@ -5,6 +5,23 @@ #include <algorithm> #include "hg.h" +// semiring for Inside/Outside +struct Boolean { + bool x; + Boolean() : x() { } + Boolean(bool i) : x(i) { } + operator bool() const { return x; } + // normally you'd use the logical (short circuit) || && operators, but bool really is guaranteed to be 0 or 1 numerically. + void operator+=(Boolean o) { x|=o.x; } + friend inline Boolean operator +(Boolean a,Boolean b) { + return Boolean(a.x|b.x); + } + void operator*=(Boolean o) { x&=o.x; } + friend inline Boolean operator *(Boolean a,Boolean b) { + return Boolean(a.x&b.x); + } +}; + // run the inside algorithm and return the inside score // if result is non-NULL, result will contain the inside // score for each node |