mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-19 21:13:12 -07:00
Add ChiakiSeqNum32
This commit is contained in:
parent
044159e83d
commit
b3f71fc5ab
2 changed files with 45 additions and 19 deletions
|
@ -27,27 +27,31 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef uint16_t ChiakiSeqNum16;
|
#define CHIAKI_DEFINE_SEQNUM(bits, greater_sint) \
|
||||||
|
\
|
||||||
#define CHIAKI_SEQ_NUM_16_MAX 0xffff
|
typedef uint##bits##_t ChiakiSeqNum##bits; \
|
||||||
|
\
|
||||||
static inline bool chiaki_seq_num_16_lt(ChiakiSeqNum16 a, ChiakiSeqNum16 b)
|
static inline bool chiaki_seq_num_##bits##_lt(ChiakiSeqNum##bits a, ChiakiSeqNum##bits b) \
|
||||||
{
|
{ \
|
||||||
if(a == b)
|
if(a == b) \
|
||||||
return false;
|
return false; \
|
||||||
int32_t d = (int32_t)b - (int32_t)a;
|
greater_sint d = (greater_sint)b - (greater_sint)a; \
|
||||||
return (a < b && d < (1 << 15))
|
return (a < b && d < ((ChiakiSeqNum##bits)1 << (bits - 1))) \
|
||||||
|| ((a > b) && -d > (1 << 15));
|
|| ((a > b) && -d > ((ChiakiSeqNum##bits)1 << (bits - 1))); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
static inline bool chiaki_seq_num_##bits##_gt(ChiakiSeqNum##bits a, ChiakiSeqNum##bits b) \
|
||||||
|
{ \
|
||||||
|
if(a == b) \
|
||||||
|
return false; \
|
||||||
|
greater_sint d = (greater_sint)b - (greater_sint)a; \
|
||||||
|
return (a < b && d > ((ChiakiSeqNum##bits)1 << (bits - 1))) \
|
||||||
|
|| ((a > b) && -d < ((ChiakiSeqNum##bits)1 << (bits - 1))); \
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool chiaki_seq_num_16_gt(ChiakiSeqNum16 a, ChiakiSeqNum16 b)
|
CHIAKI_DEFINE_SEQNUM(16, int32_t)
|
||||||
{
|
CHIAKI_DEFINE_SEQNUM(32, int64_t)
|
||||||
if(a == b)
|
#undef CHIAKI_DEFINE_SEQNUM
|
||||||
return false;
|
|
||||||
int32_t d = (int32_t)b - (int32_t)a;
|
|
||||||
return (a < b && d > (1 << 15))
|
|
||||||
|| ((a > b) && -d < (1 << 15));
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,6 +51,20 @@ static MunitResult test_seq_num_16(const MunitParameter params[], void *user)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static MunitResult test_seq_num_32(const MunitParameter params[], void *user)
|
||||||
|
{
|
||||||
|
munit_assert(chiaki_seq_num_32_gt(1, 0));
|
||||||
|
munit_assert(!chiaki_seq_num_32_gt(0, 1));
|
||||||
|
munit_assert(!chiaki_seq_num_32_lt(1, 0));
|
||||||
|
munit_assert(chiaki_seq_num_32_lt(0, 1));
|
||||||
|
munit_assert(chiaki_seq_num_32_gt(1, 0xfffffff5));
|
||||||
|
munit_assert(!chiaki_seq_num_32_gt(0xfffffff5, 1));
|
||||||
|
|
||||||
|
return MUNIT_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
MunitTest tests_seq_num[] = {
|
MunitTest tests_seq_num[] = {
|
||||||
{
|
{
|
||||||
"/seq_num_16",
|
"/seq_num_16",
|
||||||
|
@ -60,5 +74,13 @@ MunitTest tests_seq_num[] = {
|
||||||
MUNIT_TEST_OPTION_NONE,
|
MUNIT_TEST_OPTION_NONE,
|
||||||
NULL
|
NULL
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"/seq_num_32",
|
||||||
|
test_seq_num_32,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
MUNIT_TEST_OPTION_NONE,
|
||||||
|
NULL
|
||||||
|
},
|
||||||
{ NULL, NULL, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL }
|
{ NULL, NULL, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL }
|
||||||
};
|
};
|
Loading…
Add table
Add a link
Reference in a new issue