Merge pull request #5642 from lebrush/cib-peek

core/cib: add peek capabilities
This commit is contained in:
Oleg Hahm 2016-07-18 11:45:45 +02:00 committed by GitHub
commit 1e17eece1f
2 changed files with 31 additions and 0 deletions

View File

@ -86,6 +86,22 @@ static inline int cib_get(cib_t *__restrict cib)
return -1;
}
/**
* @brief Get the index of the next item in buffer without removing it.
*
* @param[in,out] cib corresponding *cib* to buffer.
* Must not be NULL.
* @return index of next item, -1 if the buffer is empty
*/
static inline int cib_peek(cib_t *__restrict cib)
{
if (cib->write_count > cib->read_count) {
return (int) (cib->read_count & cib->mask);
}
return -1;
}
/**
* @brief Get index for item in buffer to put to.
*

View File

@ -36,6 +36,20 @@ static void test_cib_get(void)
TEST_ASSERT_EQUAL_INT(-1, cib_get(&cib));
}
static void test_cib_peek(void)
{
cib_init(&cib, TEST_CIB_SIZE);
TEST_ASSERT_EQUAL_INT(-1, cib_peek(&cib));
TEST_ASSERT_EQUAL_INT(0, cib_put(&cib));
TEST_ASSERT_EQUAL_INT(0, cib_peek(&cib));
TEST_ASSERT_EQUAL_INT(1, cib_put(&cib));
TEST_ASSERT_EQUAL_INT(0, cib_peek(&cib));
TEST_ASSERT_EQUAL_INT(0, cib_get(&cib));
TEST_ASSERT_EQUAL_INT(1, cib_peek(&cib));
TEST_ASSERT_EQUAL_INT(1, cib_get(&cib));
TEST_ASSERT_EQUAL_INT(-1, cib_peek(&cib));
}
static void test_cib_avail(void)
{
TEST_ASSERT_EQUAL_INT(0, cib_avail(&cib));
@ -83,6 +97,7 @@ Test *tests_core_cib_tests(void)
new_TestFixture(test_cib_put_and_get),
new_TestFixture(test_empty_cib),
new_TestFixture(test_singleton_cib),
new_TestFixture(test_cib_peek),
};
EMB_UNIT_TESTCALLER(core_cib_tests, set_up, NULL, fixtures);