diff options
author | Chris Johns <chrisj@rtems.org> | 2012-04-25 10:12:19 +1000 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2012-04-25 10:12:19 +1000 |
commit | 673b40c95705127635af12bda15694fd6ab5a96b (patch) | |
tree | 5c243823cf495ba3702773f94b275a442ac218de /rtl-chain-iterator.h |
Import the current project to git.
Diffstat (limited to 'rtl-chain-iterator.h')
-rw-r--r-- | rtl-chain-iterator.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/rtl-chain-iterator.h b/rtl-chain-iterator.h new file mode 100644 index 0000000..bdaa90e --- /dev/null +++ b/rtl-chain-iterator.h @@ -0,0 +1,61 @@ +/* + * COPYRIGHT (c) 2010 Chris Johns <chrisj@rtems.org> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ +/** + * @file + * + * @ingroup rtems_rtl + * + * @brief RTEMS Run-Time Linker Chain Iterator. + */ + +#if !defined (_RTEMS_RTL_CHAIN_ITERATOR_H_) +#define _RTEMS_RTL_CHAIN_ITERATOR_H_ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#include <rtems/chain.h> + +/** + * Chain iterator handler. + */ +typedef bool (*rtems_chain_iterator) (rtems_chain_node* node, void* data); + +/** + * Iterate a chain of nodes invoking the iterator handler. Supply a data + * pointer the iterator moves data between the invoker and the iterator. + * + * The iterator allows removal of the node from the chain. + * + * @param chain The chain of nodes to iterator over. + * @param iterator The iterator handler called once for each node. + * @param data Pointer to the data used by the iterator. + * @retval true The whole chain was iterated over. + * @retval false The iterator returned false. + */ +bool +rtems_rtl_chain_iterate (rtems_chain_control* chain, + rtems_chain_iterator iterator, + void* data); + +/** + * Count the number of nodes on the chain. + * + * @param chain The chain to count the nodes of. + * @return int The number of nodes. + */ +int rtems_rtl_chain_count (rtems_chain_control* chain); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif |