mirror of https://github.com/F-Stack/f-stack.git
45 lines
751 B
C
45 lines
751 B
C
/* SPDX-License-Identifier: BSD-3-Clause
|
|
* Copyright(c) 2001-2021 Intel Corporation
|
|
*/
|
|
|
|
#ifndef _ICE_TMATCH_H_
|
|
#define _ICE_TMATCH_H_
|
|
|
|
static inline
|
|
bool ice_ternary_match_byte(u8 key, u8 key_inv, u8 pat)
|
|
{
|
|
u8 k1, k2, v;
|
|
int i;
|
|
|
|
for (i = 0; i < 8; i++) {
|
|
k1 = (u8)(key & (1 << i));
|
|
k2 = (u8)(key_inv & (1 << i));
|
|
v = (u8)(pat & (1 << i));
|
|
|
|
if (k1 != 0 && k2 != 0)
|
|
continue;
|
|
if (k1 == 0 && k2 == 0)
|
|
return false;
|
|
|
|
if (k1 == v)
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
static inline
|
|
bool ice_ternary_match(const u8 *key, const u8 *key_inv,
|
|
const u8 *pat, int len)
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < len; i++)
|
|
if (!ice_ternary_match_byte(key[i], key_inv[i], pat[i]))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
#endif /* _ICE_TMATCH_H_ */
|