#ifndef RULE_ENGINE_H_
#define RULE_ENGINE_H_
#include "rdf_rule_core.h"
#include "rdf_graph.h"
#include "rdf_session.h"
#include "rule_session.h"
#include "knowledge_base.h"
namespace psearch {
class PSearchSession;
typedef std::tr1::shared_ptr<PSearchSession> psession_ptr_type;
}; /* psearch namespace */
namespace rule {
class rule_engine;
typedef std::tr1::shared_ptr<rule_engine> rule_engine_ptr_type;
/////////////////////////////////////////////////////////////////////////////////////////
// class rule_engine
//
/////////////////////////////////////////////////////////////////////////////////////////
class rule_engine
{
typedef std::tr1::unordered_map<unsigned int, rule_session_ptr_type> rule_session_ptr_map_type;
typedef std::tr1::unordered_map<unsigned int, psearch::psession_ptr_type> psearch_session_ptr_map_type;
public:
typedef knowledge_base::rule_graph_type rule_graph_type;
typedef knowledge_base::rule_vertex_type rule_vertex_t;
inline rule_engine(knowledge_base_ptr_type const& kbase_p):
m_kbase_p(kbase_p)
{};
inline knowledge_base &
get_knowledge_base()
{
return *m_kbase_p;
};
inline knowledge_base const&
get_knowledge_base()const
{
return *m_kbase_p;
};
inline rule_session_ptr_type
create_rule_session(rdf::rdf_session_ptr_type rdf_sn_p)
{
rule_session_ptr_type session_p(new rule_session(&*rdf_sn_p, *m_kbase_p));
session_p->initialize();
rdf_sn_p->get_inferred_graph()->register_call_back_manager(&*session_p, m_kbase_p->get_inferred_cback_mgr());
rdf_sn_p->get_asserted_graph()->register_call_back_manager(&*session_p, m_kbase_p->get_asserted_cback_mgr());
return session_p;
};
// ============================================================================================================
// MEMBER FUNCTIONS FOR PSEARCH SESSION MANAGEMENT
// ============================================================================================================
// defined in psearch_session.h for inlining.
psearch::psession_ptr_type
create_psearch_session(rdf::rdf_session_ptr_type rdf_sn_p);
private:
knowledge_base_ptr_type m_kbase_p;
};
/////////////////////////////////////////////////////////////////////////////////////////
// create_rule_engine
//
/////////////////////////////////////////////////////////////////////////////////////////
inline rule_engine_ptr_type
create_rule_engine(knowledge_base_ptr_type const& kbase_p)
{
return rule_engine_ptr_type(new rule_engine(kbase_p));
};
}; /*namespace rule */
#endif /*RULE_ENGINE_H_*/