#ifndef EMPATHY_SEMA_UNI_RULESET_H
#define EMPATHY_SEMA_UNI_RULESET_H
namespace empathy::sema
{
class UnificationContext;
class UnificationRuleSet
{
public:
using UniFunc = function< UniGen ( const Term& lhs, const Term& rhs, UnificationContext& ) >;
using HalfUniFunc = function< UniGen ( const Term& lhs, UnificationContext& ) >;
UnificationRuleSet();
void addSymRule( const Term& pat, UniFunc f );
void addSymRule( const Term& pat1, const Term& pat2, UniFunc f );
void addAsymRule( const Term& pat1, const Term& pat2, UniFunc f );
void addHalfUnificationRule( const Term& pat, HalfUniFunc f );
const auto& uniRules() const { return m_uniRules; }
const auto& halfUniRules() const { return m_halfUniRules; }
private:
Trie< UniFunc > m_uniRules;
Trie< HalfUniFunc > m_halfUniRules;
};
}
#endif