Bit Pattern DSL

Posted svenzhang9527

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bit Pattern DSL相关的知识,希望对你有一定的参考价值。

#include <cstdint>
#include <stdexcept>


class BitPattern
{
private:
    std::uint64_t expected{};
    std::uint64_t mask{0XFFFFFFFFFFFFFFFF};

public:
    template<std::size_t Size>
    explicit constexpr BitPattern(const char (&input)[Size])
    {
        std::uint64_t cur_bit = (1 << (Size - 2));
        for(const char val : input)
        {
            if(val == 0){
                return;
            }
            if(val == ‘1‘)
            {
                expected |= cur_bit;
            }
            else if(val == ‘0‘)
            {

            }
            else if(val == ‘x‘ || val == ‘X‘)
            {
                mask &= ~cur_bit;
            }
            else
            {
                throw std::logic_error("Unknow ....");
            }
            cur_bit >>= 1;
        }
    }
    constexpr friend bool operator==(const std::uint64_t value, const BitPattern& pattern)
    {
        return (value & pattern.mask) == pattern.expected;
    }
};

int main()
{
    static_assert(0b110101 == BitPattern("11XX01"));
}

以上是关于Bit Pattern DSL的主要内容,如果未能解决你的问题,请参考以下文章

Pattern 类中的 pattern() 与 toString()

正则表达式-- (?:pattern)与(?=pattern)的区别

[Pattern] Adapter pattern

javascript (pattern) (?:pattern)

[Design Pattern] DAO Pattern 简单案例

[Design Pattern] Filter Pattern 简单案例