#ifndef EMPATHY_SEMA_UNI_CONTEXT_H
#define EMPATHY_SEMA_UNI_CONTEXT_H
namespace empathy::sema
{
using UnificationRuleSet = Trie< function< Term( const Term& lhs, const Term& rhs, UnificationContext&& ) > >;
class UnificationContext
{
public:
UnificationContext( const ptr< UnificationRuleSet >& rules ) :
m_rules( rules )
{}
UnificationContext( ptr< UnificationRuleSet >&& rules ) :
m_rules( move( rules ) )
{}
private:
ptr< UnifcationRuleSet > m_rules;
immer::vector< Term > m_values;
ptr< unordered_map< StringId, size_t > > m_variables;
size_t m_dependencyUpdateCount = 1024;
};
}
#endif