--- cpukit/sapi/include/rtems/chain.h | 10 ++++++++++ doc/user/chains.t | 33 +++++++++++++++++++++++++++++++++ testsuites/sptests/spchain/init.c | 7 +++++++ 3 files changed, 50 insertions(+)
diff --git a/cpukit/sapi/include/rtems/chain.h b/cpukit/sapi/include/rtems/chain.h index 8da355d..4d586ff 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 e5dffc2..79e5984 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 ca2e135..476629b 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) -- 1.8.4.5 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel