00001
00002 #pragma once
00003
00004 #include <map>
00005 #include <iostream>
00006 #include <vector>
00007 #include "Phrase.h"
00008 #include "Range.h"
00009 #include "NonTerminal.h"
00010 #include "moses/FactorCollection.h"
00011 #include <boost/shared_ptr.hpp>
00012 #include "TargetPhraseCollection.h"
00013 namespace Moses
00014 {
00015
00016 class PhraseDictionary;
00017 class ScoreComponentCollection;
00018 class TargetPhrase;
00019 class InputPath;
00020 struct ScorePair;
00021
00022 typedef std::vector<InputPath*> InputPathList;
00023
00030 class InputPath
00031 {
00032 friend std::ostream& operator<<(std::ostream& out, const InputPath &obj);
00033
00034 public:
00035
00036 typedef std::pair<TargetPhraseCollection::shared_ptr, const void*>
00037 TPCollStoreEntry;
00038
00039 typedef std::map<const PhraseDictionary*, TPCollStoreEntry>
00040 TargetPhrases;
00041
00042 public:
00043
00044 TranslationTask const* ttask;
00045 protected:
00046 const InputPath *m_prevPath;
00047 Phrase m_phrase;
00048 Range m_range;
00049 const ScorePair *m_inputScore;
00050 size_t m_nextNode;
00051
00052
00053 TargetPhrases m_targetPhrases;
00054
00055
00056 mutable std::vector<std::vector<const Word*> > m_ruleSourceFromInputPath;
00057 const NonTerminalSet m_sourceNonTerms;
00058 std::vector<bool> m_sourceNonTermArray;
00059
00060
00061 public:
00062 explicit InputPath()
00063 : m_prevPath(NULL)
00064 , m_range(NOT_FOUND, NOT_FOUND)
00065 , m_inputScore(NULL)
00066 , m_nextNode(NOT_FOUND) {
00067 }
00068
00069 InputPath(TranslationTask const* ttask,
00070 Phrase const& phrase,
00071 NonTerminalSet const& sourceNonTerms,
00072 Range const& range,
00073 InputPath const* prevNode,
00074 ScorePair const* inputScore);
00075
00076 ~InputPath();
00077
00078 const Phrase &GetPhrase() const {
00079 return m_phrase;
00080 }
00081 const NonTerminalSet &GetNonTerminalSet() const {
00082 return m_sourceNonTerms;
00083 }
00084 const std::vector<bool> &GetNonTerminalArray() const {
00085 return m_sourceNonTermArray;
00086 }
00087 const Range &GetWordsRange() const {
00088 return m_range;
00089 }
00090 const Word &GetLastWord() const;
00091
00092 const InputPath *GetPrevPath() const {
00093 return m_prevPath;
00094 }
00095
00097 size_t GetNextNode() const {
00098 return m_nextNode;
00099 }
00100
00101 void SetNextNode(size_t nextNode) {
00102 m_nextNode = nextNode;
00103 }
00104
00105 void
00106 SetTargetPhrases(const PhraseDictionary &phraseDictionary,
00107 TargetPhraseCollection::shared_ptr const& targetPhrases,
00108 const void *ptNode);
00109
00110 TargetPhraseCollection::shared_ptr
00111 GetTargetPhrases(const PhraseDictionary &phraseDictionary) const;
00112
00113 const TargetPhrases &GetTargetPhrases() const {
00114 return m_targetPhrases;
00115 }
00116
00117
00118 const void *GetPtNode(const PhraseDictionary &phraseDictionary) const;
00119 const ScorePair *GetInputScore() const {
00120 return m_inputScore;
00121 }
00122
00123 size_t GetTotalRuleSize() const;
00124
00125 std::vector<const Word*> &AddRuleSourceFromInputPath() const {
00126 m_ruleSourceFromInputPath.push_back(std::vector<const Word*>());
00127 return m_ruleSourceFromInputPath.back();
00128 }
00129
00130 };
00131
00132 };
00133