Goose  Artifact [01c2d89a77]

Artifact 01c2d89a77e1c1d84024c83b75b4ca1a7c6af049aa4fad8e2cd98b20ab35fc76:

  • File bs/ir/anyterm.h — part of check-in [5ecf839837] at 2018-11-02 17:11:06 on branch trunk — ir: implemented the graphviz trie dumper, and fixed some bugs in Merge. (user: achavasse size: 977)

#ifndef EMPATHY_IR_ANYTERM_H
#define EMPATHY_IR_ANYTERM_H

namespace empathy::ir
{
    class AnyTerm
    {
        public:
            template< typename S >
            AnyTerm( S&& varName ) :
                m_varName( varName )
            {}

            const auto& varName() const { return m_varName; }
            friend ostream& ToString( ostream& out, const AnyTerm& v );

            constexpr auto operator==( const AnyTerm& rhs ) const
            {
                return m_varName == rhs.m_varName;
            }

            friend ostream& operator<<( ostream& out, const AnyTerm& x )
            {
                return out << x.m_varName;
            }

        private:
            StringId m_varName;
    };
}

namespace std
{
    template<> struct hash< empathy::ir::AnyTerm >
    {
        size_t operator()( const empathy::ir::AnyTerm& x ) const
        {
            return hash< empathy::util::StringId >()( x.varName() );
        }
    };
}

#endif