diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-11-03 11:10:21 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-11-05 11:30:09 +0100 |
commit | aa473025f70d144ef9b50e833e7d9b91aad134f9 (patch) | |
tree | 2b38fa0e54f742b5bb2b28baefafac1bb1a9e4ad | |
parent | score: Fix warning (diff) | |
download | rtems-aa473025f70d144ef9b50e833e7d9b91aad134f9.tar.bz2 |
sapi: Add rtems_chain_get_first_unprotected()
Close #2459.
-rw-r--r-- | cpukit/sapi/include/rtems/chain.h | 10 | ||||
-rw-r--r-- | doc/user/chains.t | 33 | ||||
-rw-r--r-- | testsuites/sptests/spchain/init.c | 7 |
3 files changed, 50 insertions, 0 deletions
diff --git a/cpukit/sapi/include/rtems/chain.h b/cpukit/sapi/include/rtems/chain.h index 8da355da0c..4d586ff06e 100644 --- a/cpukit/sapi/include/rtems/chain.h +++ b/cpukit/sapi/include/rtems/chain.h @@ -624,6 +624,16 @@ RTEMS_INLINE_ROUTINE rtems_chain_node *rtems_chain_get_unprotected( } /** + * @brief See _Chain_Get_first_unprotected(). + */ +RTEMS_INLINE_ROUTINE rtems_chain_node *rtems_chain_get_first_unprotected( + rtems_chain_control *the_chain +) +{ + return _Chain_Get_first_unprotected( the_chain ); +} + +/** * @brief Insert a node on a chain * * This routine inserts @a the_node on a chain immediately following diff --git a/doc/user/chains.t b/doc/user/chains.t index e5dffc24df..79e5984ffb 100644 --- a/doc/user/chains.t +++ b/doc/user/chains.t @@ -35,6 +35,7 @@ provided by RTEMS is: @item @code{@value{DIRPREFIX}chain_extract_unprotected} - Extract the node from the chain (unprotected) @item @code{@value{DIRPREFIX}chain_get} - Return the first node on the chain @item @code{@value{DIRPREFIX}chain_get_unprotected} - Return the first node on the chain (unprotected) +@item @code{@value{DIRPREFIX}chain_get_first_unprotected} - Get the first node on the chain (unprotected) @item @code{@value{DIRPREFIX}chain_insert} - Insert the node into the chain @item @code{@value{DIRPREFIX}chain_insert_unprotected} - Insert the node into the chain (unprotected) @item @code{@value{DIRPREFIX}chain_append} - Append the node to chain @@ -661,6 +662,38 @@ interrupts. @c @c @page +@subsection Get the First Node (unprotected) + +@cindex chain get first node + +@subheading CALLING SEQUENCE: + +@ifset is-C +@findex @value{DIRPREFIX}chain_get_first_unprotected +@example +@value{DIRPREFIX}chain_node *@value{DIRPREFIX}chain_get_first_unprotected( + @value{DIRPREFIX}chain_control *the_chain +); +@end example +@end ifset + +@subheading RETURNS: + +A pointer to the former first node is returned. + +@subheading DESCRIPTION: + +Removes the first node from the chain and returns a pointer to it. In case the +chain was empty, then the results are unpredictable. + +@subheading NOTES: + +The function does nothing to ensure the atomicity of the operation. + +@c +@c +@c +@page @subsection Insert a Node @cindex chain insert a node diff --git a/testsuites/sptests/spchain/init.c b/testsuites/sptests/spchain/init.c index ca2e135e95..476629b548 100644 --- a/testsuites/sptests/spchain/init.c +++ b/testsuites/sptests/spchain/init.c @@ -117,6 +117,13 @@ static void test_chain_first_and_last(void) puts( "INIT - Verify rtems_chain_is_last" ); cnode = rtems_chain_last(&chain); rtems_test_assert( rtems_chain_is_last( cnode ) ); + + cnode = rtems_chain_get_first_unprotected( &chain ); + rtems_test_assert( cnode == &node1 ); + cnode = rtems_chain_first( &chain ); + rtems_test_assert( cnode == &node2 ); + cnode = rtems_chain_last( &chain ); + rtems_test_assert( cnode == &node2 ); } static void test_chain_with_notification(void) |