8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
class UnificationRuleSet
{
public:
using Func = function< optional< Term > ( const Term& lhs, const Term& rhs, UnificationContext& ) >;
UnificationRuleSet();
template< typename F >
void addRule( const Term& pat, F&& func )
{
m_trie = Merge( m_trie, TVEC( pat, pat ), [&]( auto&& ){ return func; } );
}
template< typename F >
void addRule( const Term& pat1, const Term& pat2, F&& func )
{
m_trie = Merge( m_trie, TVEC( pat1, pat2 ), [&]( auto&& ){ return func; } );
m_trie = Merge( m_trie, TVEC( pat2, pat1 ), [&]( auto&& ){ return func; } );
}
const auto& trie() const { return m_trie; }
private:
Trie< Func > m_trie;
};
}
|
<
|
<
<
<
<
<
|
<
<
<
<
|
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
class UnificationRuleSet
{
public:
using Func = function< optional< Term > ( const Term& lhs, const Term& rhs, UnificationContext& ) >;
UnificationRuleSet();
void addRule( const Term& pat, Func f );
void addRule( const Term& pat1, const Term& pat2, Func f );
const auto& trie() const { return m_trie; }
private:
Trie< Func > m_trie;
};
}
|