码迷,mamicode.com
首页 > 其他好文 > 详细

Bit Pattern DSL

时间:2020-07-30 01:40:33      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:dsl   ati   expec   for   val   vat   put   ffffff   explicit   

#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

标签:dsl   ati   expec   for   val   vat   put   ffffff   explicit   

原文地址:https://www.cnblogs.com/svenzhang9527/p/13401343.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!