// $Id$ // vim:tabstop=2 /*********************************************************************** Moses - factored phrase-based language decoder Copyright (C) 2006 University of Edinburgh This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ***********************************************************************/ #ifndef moses_PhraseDictionaryCompact_h #define moses_PhraseDictionaryCompact_h #include #ifdef WITH_THREADS #ifdef BOOST_HAS_PTHREADS #include #endif #endif #include "moses/TranslationModel/PhraseDictionary.h" #include "moses/ThreadPool.h" #include "BlockHashIndex.h" #include "StringVector.h" #include "PhraseDecoder.h" #include "TargetPhraseCollectionCache.h" namespace Moses { class PhraseDecoder; class PhraseDictionaryCompact : public PhraseDictionary { protected: friend class PhraseDecoder; bool m_inMemory; bool m_useAlignmentInfo; typedef std::vector PhraseCache; #ifdef WITH_THREADS boost::mutex m_sentenceMutex; typedef std::map SentenceCache; #else typedef PhraseCache SentenceCache; #endif SentenceCache m_sentenceCache; BlockHashIndex m_hash; PhraseDecoder* m_phraseDecoder; StringVector m_targetPhrasesMapped; StringVector m_targetPhrasesMemory; std::vector m_weight; public: PhraseDictionaryCompact(const std::string &line) :PhraseDictionary("PhraseDictionaryCompact", line) ,m_inMemory(true) ,m_useAlignmentInfo(true) ,m_hash(10, 16) ,m_phraseDecoder(0) ,m_weight(0) { } ~PhraseDictionaryCompact(); bool InitDictionary(); const TargetPhraseCollection* GetTargetPhraseCollection(const Phrase &source) const; TargetPhraseVectorPtr GetTargetPhraseCollectionRaw(const Phrase &source) const; void AddEquivPhrase(const Phrase &source, const TargetPhrase &targetPhrase); void CacheForCleanup(TargetPhraseCollection* tpc); void CleanUpAfterSentenceProcessing(const InputType &source); virtual ChartRuleLookupManager *CreateRuleLookupManager( const InputType &, const ChartCellCollectionBase &) { assert(false); return 0; } TO_STRING(); }; } #endif