diff options
Diffstat (limited to 'cpukit/include')
-rw-r--r-- | cpukit/include/rtems/posix/keyimpl.h | 2 | ||||
-rw-r--r-- | cpukit/include/rtems/score/freechain.h | 124 | ||||
-rw-r--r-- | cpukit/include/rtems/score/freechainimpl.h | 161 |
3 files changed, 163 insertions, 124 deletions
diff --git a/cpukit/include/rtems/posix/keyimpl.h b/cpukit/include/rtems/posix/keyimpl.h index d27244fe81..eed5d3fed2 100644 --- a/cpukit/include/rtems/posix/keyimpl.h +++ b/cpukit/include/rtems/posix/keyimpl.h @@ -19,7 +19,7 @@ #include <rtems/posix/key.h> #include <rtems/score/chainimpl.h> -#include <rtems/score/freechain.h> +#include <rtems/score/freechainimpl.h> #include <rtems/score/objectimpl.h> #include <rtems/score/percpu.h> diff --git a/cpukit/include/rtems/score/freechain.h b/cpukit/include/rtems/score/freechain.h index ab1e8150da..7db1101cff 100644 --- a/cpukit/include/rtems/score/freechain.h +++ b/cpukit/include/rtems/score/freechain.h @@ -16,8 +16,7 @@ #ifndef _RTEMS_SCORE_FREECHAIN_H #define _RTEMS_SCORE_FREECHAIN_H -#include <rtems/score/basedefs.h> -#include <rtems/score/chainimpl.h> +#include <rtems/score/chain.h> #ifdef __cplusplus extern "C" { @@ -38,11 +37,6 @@ extern "C" { */ /** - * @brief Allocator function. - */ -typedef void *( *Freechain_Allocator )( size_t size ); - -/** * @brief The freechain control. */ typedef struct { @@ -52,122 +46,6 @@ typedef struct { Chain_Control Free; } Freechain_Control; -/** - * @brief Initializes a freechain. - * - * This routine initializes the freechain control structure to manage a chain - * of nodes. In the case the freechain is empty the extend handler is called to - * get more nodes. - * - * @param[out] freechain The freechain control to initialize. - * @param[out] initial_nodes Array with the initial nodes. - * @param number_nodes The initial number of nodes. - * @param node_size The node size. - */ -RTEMS_INLINE_ROUTINE void _Freechain_Initialize( - Freechain_Control *freechain, - void *initial_nodes, - size_t number_nodes, - size_t node_size -) -{ - _Chain_Initialize( - &freechain->Free, - initial_nodes, - number_nodes, - node_size - ); -} - -/** - * @brief Return true if the freechain is empty, otherwise false - * - * @param freechain The freechain control. - */ -RTEMS_INLINE_ROUTINE bool _Freechain_Is_empty( - const Freechain_Control *freechain -) -{ - return _Chain_Is_empty( &freechain->Free ); -} - -/** - * @brief Pops a node from the freechain. - * - * The freechain shall not be empty. - * - * @param freechain The freechain control. - */ -RTEMS_INLINE_ROUTINE void *_Freechain_Pop( Freechain_Control *freechain ) -{ - return _Chain_Get_first_unprotected( &freechain->Free ); -} - -/** - * @brief Pushes a node back to the freechain. - * - * @param freechain The freechain control. - * @param node The node to push back. The node shall not be @c NULL. - */ -void RTEMS_INLINE_ROUTINE _Freechain_Push( - Freechain_Control *freechain, - void *node -) -{ - _Chain_Initialize_node( node ); - _Chain_Prepend_unprotected( &freechain->Free, node ); -} - -/** - * @brief Extend the freechain with new nodes. - * - * @param freechain The freechain control. - * @param allocator The allocator function. - * @param number_nodes_to_extend The number of nodes to extend. - * @param node_size The node size. - * - * @retval NULL The extend operation failed. - * @retval nodes Pointer to the new nodes. - */ -void *_Freechain_Extend( - Freechain_Control *freechain, - Freechain_Allocator allocator, - size_t number_nodes_to_extend, - size_t node_size -); - -/** - * @brief Gets a node from the freechain. - * - * @param[in, out] freechain The freechain control. - * @param allocator The allocator function. - * @param number_nodes_to_extend The number of nodes in the case an extend is - * necessary due to an empty freechain. - * @param[in] node_size The node size. - * - * @retval NULL The freechain is empty and the extend operation failed. - * @retval pointer Pointer to a node. The node ownership passes to the - * caller. - */ -void *_Freechain_Get( - Freechain_Control *freechain, - Freechain_Allocator allocator, - size_t number_nodes_to_extend, - size_t node_size -); - -/** - * @brief Puts a node back onto the freechain. - * - * @param[in, out] freechain The freechain control. - * @param[out] node The node to put back. The node may be @c NULL, in this case - * the function does nothing. - */ -void _Freechain_Put( - Freechain_Control *freechain, - void *node -); - /** @} */ #ifdef __cplusplus diff --git a/cpukit/include/rtems/score/freechainimpl.h b/cpukit/include/rtems/score/freechainimpl.h new file mode 100644 index 0000000000..25660003ff --- /dev/null +++ b/cpukit/include/rtems/score/freechainimpl.h @@ -0,0 +1,161 @@ +/** + * @file + * + * @ingroup RTEMSScoreFreechain + * + * @brief Freechain Handler API + */ +/* + * Copyright (c) 2013 Gedare Bloom. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +#ifndef _RTEMS_SCORE_FREECHAINIMPL_H +#define _RTEMS_SCORE_FREECHAINIMPL_H + +#include <rtems/score/freechain.h> +#include <rtems/score/basedefs.h> +#include <rtems/score/chainimpl.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @addtogroup RTEMSScoreFreechain + * + * @{ + */ + +/** + * @brief Allocator function. + */ +typedef void *( *Freechain_Allocator )( size_t size ); + +/** + * @brief Initializes a freechain. + * + * This routine initializes the freechain control structure to manage a chain + * of nodes. In the case the freechain is empty the extend handler is called to + * get more nodes. + * + * @param[out] freechain The freechain control to initialize. + * @param[out] initial_nodes Array with the initial nodes. + * @param number_nodes The initial number of nodes. + * @param node_size The node size. + */ +RTEMS_INLINE_ROUTINE void _Freechain_Initialize( + Freechain_Control *freechain, + void *initial_nodes, + size_t number_nodes, + size_t node_size +) +{ + _Chain_Initialize( + &freechain->Free, + initial_nodes, + number_nodes, + node_size + ); +} + +/** + * @brief Return true if the freechain is empty, otherwise false + * + * @param freechain The freechain control. + */ +RTEMS_INLINE_ROUTINE bool _Freechain_Is_empty( + const Freechain_Control *freechain +) +{ + return _Chain_Is_empty( &freechain->Free ); +} + +/** + * @brief Pops a node from the freechain. + * + * The freechain shall not be empty. + * + * @param freechain The freechain control. + */ +RTEMS_INLINE_ROUTINE void *_Freechain_Pop( Freechain_Control *freechain ) +{ + return _Chain_Get_first_unprotected( &freechain->Free ); +} + +/** + * @brief Pushes a node back to the freechain. + * + * @param freechain The freechain control. + * @param node The node to push back. The node shall not be @c NULL. + */ +void RTEMS_INLINE_ROUTINE _Freechain_Push( + Freechain_Control *freechain, + void *node +) +{ + _Chain_Initialize_node( node ); + _Chain_Prepend_unprotected( &freechain->Free, node ); +} + +/** + * @brief Extend the freechain with new nodes. + * + * @param freechain The freechain control. + * @param allocator The allocator function. + * @param number_nodes_to_extend The number of nodes to extend. + * @param node_size The node size. + * + * @retval NULL The extend operation failed. + * @retval nodes Pointer to the new nodes. + */ +void *_Freechain_Extend( + Freechain_Control *freechain, + Freechain_Allocator allocator, + size_t number_nodes_to_extend, + size_t node_size +); + +/** + * @brief Gets a node from the freechain. + * + * @param[in, out] freechain The freechain control. + * @param allocator The allocator function. + * @param number_nodes_to_extend The number of nodes in the case an extend is + * necessary due to an empty freechain. + * @param[in] node_size The node size. + * + * @retval NULL The freechain is empty and the extend operation failed. + * @retval pointer Pointer to a node. The node ownership passes to the + * caller. + */ +void *_Freechain_Get( + Freechain_Control *freechain, + Freechain_Allocator allocator, + size_t number_nodes_to_extend, + size_t node_size +); + +/** + * @brief Puts a node back onto the freechain. + * + * @param[in, out] freechain The freechain control. + * @param[out] node The node to put back. The node may be @c NULL, in this case + * the function does nothing. + */ +void _Freechain_Put( + Freechain_Control *freechain, + void *node +); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ |