From 354c2b50a3d707bbdf8d5b553869062cdedaf4fb Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 8 Apr 2020 11:30:32 +0200 Subject: score: Add Hide implementation details. Update #3959. --- cpukit/headers.am | 1 + cpukit/include/rtems/posix/keyimpl.h | 2 +- cpukit/include/rtems/score/freechain.h | 124 +--------------------- cpukit/include/rtems/score/freechainimpl.h | 161 +++++++++++++++++++++++++++++ cpukit/score/src/freechain.c | 2 +- cpukit/score/src/thread.c | 1 + cpukit/score/src/threadallocateunlimited.c | 1 + cpukit/score/src/threadinitialize.c | 1 + cpukit/score/src/threadrestart.c | 1 + testsuites/sptests/spfreechain01/init.c | 2 +- 10 files changed, 170 insertions(+), 126 deletions(-) create mode 100644 cpukit/include/rtems/score/freechainimpl.h diff --git a/cpukit/headers.am b/cpukit/headers.am index e1d450a99d..77df5ecb4c 100644 --- a/cpukit/headers.am +++ b/cpukit/headers.am @@ -343,6 +343,7 @@ include_rtems_score_HEADERS += include/rtems/score/coresem.h include_rtems_score_HEADERS += include/rtems/score/coresemimpl.h include_rtems_score_HEADERS += include/rtems/score/cpustdatomic.h include_rtems_score_HEADERS += include/rtems/score/freechain.h +include_rtems_score_HEADERS += include/rtems/score/freechainimpl.h include_rtems_score_HEADERS += include/rtems/score/heap.h include_rtems_score_HEADERS += include/rtems/score/heapimpl.h include_rtems_score_HEADERS += include/rtems/score/heapinfo.h 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 #include -#include +#include #include #include 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 -#include +#include #ifdef __cplusplus extern "C" { @@ -37,11 +36,6 @@ extern "C" { * @{ */ -/** - * @brief Allocator function. - */ -typedef void *( *Freechain_Allocator )( size_t size ); - /** * @brief The freechain control. */ @@ -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 +#include +#include + +#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 */ diff --git a/cpukit/score/src/freechain.c b/cpukit/score/src/freechain.c index 209a2b780d..e5b1f84a63 100644 --- a/cpukit/score/src/freechain.c +++ b/cpukit/score/src/freechain.c @@ -18,7 +18,7 @@ #include "config.h" #endif -#include +#include #include void *_Freechain_Extend( diff --git a/cpukit/score/src/thread.c b/cpukit/score/src/thread.c index 69bfcf66e7..a491753836 100644 --- a/cpukit/score/src/thread.c +++ b/cpukit/score/src/thread.c @@ -19,6 +19,7 @@ #endif #include +#include #include #include #include diff --git a/cpukit/score/src/threadallocateunlimited.c b/cpukit/score/src/threadallocateunlimited.c index 463a0ecb5d..6f2dec7388 100644 --- a/cpukit/score/src/threadallocateunlimited.c +++ b/cpukit/score/src/threadallocateunlimited.c @@ -36,6 +36,7 @@ #endif #include +#include #include #include diff --git a/cpukit/score/src/threadinitialize.c b/cpukit/score/src/threadinitialize.c index 691f56388e..d85615e4b9 100644 --- a/cpukit/score/src/threadinitialize.c +++ b/cpukit/score/src/threadinitialize.c @@ -19,6 +19,7 @@ #endif #include +#include #include #include #include diff --git a/cpukit/score/src/threadrestart.c b/cpukit/score/src/threadrestart.c index 8654f571e2..c5db6606d2 100644 --- a/cpukit/score/src/threadrestart.c +++ b/cpukit/score/src/threadrestart.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include diff --git a/testsuites/sptests/spfreechain01/init.c b/testsuites/sptests/spfreechain01/init.c index 72cd7920c5..8132757031 100644 --- a/testsuites/sptests/spfreechain01/init.c +++ b/testsuites/sptests/spfreechain01/init.c @@ -12,7 +12,7 @@ #include #include -#include +#include const char rtems_test_name[] = "SPFREECHAIN 1"; -- cgit v1.2.3