summaryrefslogtreecommitdiff
path: root/klm/search/edge.hh
diff options
context:
space:
mode:
authorKenneth Heafield <github@kheafield.com>2012-09-11 14:30:16 +0100
committerKenneth Heafield <github@kheafield.com>2012-09-11 14:31:42 +0100
commit45c9efc7d558dbe160056f02e74df1fee5d2d0e5 (patch)
tree0c26a847b78b4c0d86507b21b7338beb98ff1e73 /klm/search/edge.hh
parent8882e9ebe158aef382bb5544559ef7f2a553db62 (diff)
Add search library to cdec (not used yet)
Diffstat (limited to 'klm/search/edge.hh')
-rw-r--r--klm/search/edge.hh54
1 files changed, 54 insertions, 0 deletions
diff --git a/klm/search/edge.hh b/klm/search/edge.hh
new file mode 100644
index 00000000..4d2a5cbf
--- /dev/null
+++ b/klm/search/edge.hh
@@ -0,0 +1,54 @@
+#ifndef SEARCH_EDGE__
+#define SEARCH_EDGE__
+
+#include "lm/state.hh"
+#include "search/arity.hh"
+#include "search/rule.hh"
+#include "search/types.hh"
+#include "search/vertex.hh"
+
+#include <queue>
+
+namespace search {
+
+class Edge {
+ public:
+ Edge() {
+ end_to_ = to_;
+ }
+
+ Rule &InitRule() { return rule_; }
+
+ void Add(Vertex &vertex) {
+ assert(end_to_ - to_ < kMaxArity);
+ *(end_to_++) = &vertex;
+ }
+
+ const Vertex &GetVertex(std::size_t index) const {
+ return *to_[index];
+ }
+
+ const Rule &GetRule() const { return rule_; }
+
+ private:
+ // Rule and pointers to rule arguments.
+ Rule rule_;
+
+ Vertex *to_[kMaxArity];
+ Vertex **end_to_;
+};
+
+struct PartialEdge {
+ Score score;
+ // Terminals
+ lm::ngram::ChartState between[kMaxArity + 1];
+ // Non-terminals
+ PartialVertex nt[kMaxArity];
+
+ bool operator<(const PartialEdge &other) const {
+ return score < other.score;
+ }
+};
+
+} // namespace search
+#endif // SEARCH_EDGE__