5 #ifndef __TERNARY_FIELDS_H__
6 #define __TERNARY_FIELDS_H__
12 #include "wrap_types.h"
22 typedef enum utern_type {
46 utern_t* __init_utern8(uint8_t value, uint8_t mask);
47 utern_t* __init_utern16(uint16_t value, uint16_t mask);
48 utern_t* __init_utern32(uint32_t value, uint32_t mask);
49 utern_t* __init_utern64(uint64_t value, uint64_t mask);
56 static inline bool __utern_compare8(
const utern_t* tern,
const uint8_t* value){
59 return (tern->value.u8 & tern->mask.u8) == (*value & tern->mask.u8);
61 static inline bool __utern_compare16(
const utern_t* tern,
const uint16_t* value){
64 return (tern->value.u16 & tern->mask.u16) == (*value & tern->mask.u16);
66 static inline bool __utern_compare32(
const utern_t* tern,
const uint32_t* value){
69 return (tern->value.u32 & tern->mask.u32) == (*value & tern->mask.u32);
71 static inline bool __utern_compare64(
const utern_t* tern,
const uint64_t* value){
74 return (tern->value.u64 & tern->mask.u64) == (*value & tern->mask.u64);
76 static inline bool __utern_compare128(
const utern_t* tern,
const uint128__t* value){
79 return ( (UINT128__T_HI(tern->value.u128) & UINT128__T_HI(tern->mask.u128)) == (UINT128__T_HI(*value) & UINT128__T_HI(tern->mask.u128)) )&&
80 ( (UINT128__T_LO(tern->value.u128) & UINT128__T_LO(tern->mask.u128)) == (UINT128__T_LO(*value) & UINT128__T_LO(tern->mask.u128)) );
86 bool __utern_is_contained(
const utern_t* extensive_tern,
const utern_t* tern);
94 #endif //TERNARY_FIELDS