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)的区别
javascript (pattern) (?:pattern)