Goose  Artifact [66752b0584]

Artifact 66752b0584b84d18af9ae1506b526e9bd05f96845068d02cf632909b73cb8da3:

  • File bs/sema/uni-ruleset.h — part of check-in [fc6c22b8bc] at 2019-01-05 21:32:43 on branch trunk —
    • Changed the matching scoring system to add 2 to the complexity count for each literal value matched in the pattern.
    • Added hole unification tests.
    • Fixed various hole unification bugs.
    (user: achavasse size: 966)

#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