| #ifndef SEARCH_CONTEXT__ |
| #define SEARCH_CONTEXT__ |
|
|
| #include "search/config.hh" |
| #include "search/vertex.hh" |
|
|
| #include <boost/pool/object_pool.hpp> |
|
|
| namespace search { |
|
|
| class ContextBase { |
| public: |
| explicit ContextBase(const Config &config) : config_(config) {} |
|
|
| VertexNode *NewVertexNode() { |
| VertexNode *ret = vertex_node_pool_.construct(); |
| assert(ret); |
| return ret; |
| } |
|
|
| void DeleteVertexNode(VertexNode *node) { |
| vertex_node_pool_.destroy(node); |
| } |
|
|
| unsigned int PopLimit() const { return config_.PopLimit(); } |
|
|
| Score LMWeight() const { return config_.LMWeight(); } |
|
|
| const Config &GetConfig() const { return config_; } |
|
|
| private: |
| boost::object_pool<VertexNode> vertex_node_pool_; |
|
|
| Config config_; |
| }; |
|
|
| template <class Model> class Context : public ContextBase { |
| public: |
| Context(const Config &config, const Model &model) : ContextBase(config), model_(model) {} |
|
|
| const Model &LanguageModel() const { return model_; } |
|
|
| private: |
| const Model &model_; |
| }; |
|
|
| } |
|
|
| #endif |
|
|