00001 #ifndef SEARCH_CONTEXT__ 00002 #define SEARCH_CONTEXT__ 00003 00004 #include "search/config.hh" 00005 #include "search/vertex.hh" 00006 00007 #include <boost/pool/object_pool.hpp> 00008 00009 namespace search { 00010 00011 class ContextBase { 00012 public: 00013 explicit ContextBase(const Config &config) : config_(config) {} 00014 00015 VertexNode *NewVertexNode() { 00016 VertexNode *ret = vertex_node_pool_.construct(); 00017 assert(ret); 00018 return ret; 00019 } 00020 00021 void DeleteVertexNode(VertexNode *node) { 00022 vertex_node_pool_.destroy(node); 00023 } 00024 00025 unsigned int PopLimit() const { return config_.PopLimit(); } 00026 00027 Score LMWeight() const { return config_.LMWeight(); } 00028 00029 const Config &GetConfig() const { return config_; } 00030 00031 private: 00032 boost::object_pool<VertexNode> vertex_node_pool_; 00033 00034 Config config_; 00035 }; 00036 00037 template <class Model> class Context : public ContextBase { 00038 public: 00039 Context(const Config &config, const Model &model) : ContextBase(config), model_(model) {} 00040 00041 const Model &LanguageModel() const { return model_; } 00042 00043 private: 00044 const Model &model_; 00045 }; 00046 00047 } // namespace search 00048 00049 #endif // SEARCH_CONTEXT__