forked from Imagelibrary/rtems
score: Add <rtems/score/freechainimpl.h>
Hide implementation details. Update #3959.
This commit is contained in:
@@ -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/coresemimpl.h
|
||||||
include_rtems_score_HEADERS += include/rtems/score/cpustdatomic.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/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/heap.h
|
||||||
include_rtems_score_HEADERS += include/rtems/score/heapimpl.h
|
include_rtems_score_HEADERS += include/rtems/score/heapimpl.h
|
||||||
include_rtems_score_HEADERS += include/rtems/score/heapinfo.h
|
include_rtems_score_HEADERS += include/rtems/score/heapinfo.h
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
#include <rtems/posix/key.h>
|
#include <rtems/posix/key.h>
|
||||||
#include <rtems/score/chainimpl.h>
|
#include <rtems/score/chainimpl.h>
|
||||||
#include <rtems/score/freechain.h>
|
#include <rtems/score/freechainimpl.h>
|
||||||
#include <rtems/score/objectimpl.h>
|
#include <rtems/score/objectimpl.h>
|
||||||
#include <rtems/score/percpu.h>
|
#include <rtems/score/percpu.h>
|
||||||
|
|
||||||
|
|||||||
@@ -16,8 +16,7 @@
|
|||||||
#ifndef _RTEMS_SCORE_FREECHAIN_H
|
#ifndef _RTEMS_SCORE_FREECHAIN_H
|
||||||
#define _RTEMS_SCORE_FREECHAIN_H
|
#define _RTEMS_SCORE_FREECHAIN_H
|
||||||
|
|
||||||
#include <rtems/score/basedefs.h>
|
#include <rtems/score/chain.h>
|
||||||
#include <rtems/score/chainimpl.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -37,11 +36,6 @@ extern "C" {
|
|||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Allocator function.
|
|
||||||
*/
|
|
||||||
typedef void *( *Freechain_Allocator )( size_t size );
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The freechain control.
|
* @brief The freechain control.
|
||||||
*/
|
*/
|
||||||
@@ -52,122 +46,6 @@ typedef struct {
|
|||||||
Chain_Control Free;
|
Chain_Control Free;
|
||||||
} Freechain_Control;
|
} 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
|
#ifdef __cplusplus
|
||||||
|
|||||||
161
cpukit/include/rtems/score/freechainimpl.h
Normal file
161
cpukit/include/rtems/score/freechainimpl.h
Normal file
@@ -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 */
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <rtems/score/freechain.h>
|
#include <rtems/score/freechainimpl.h>
|
||||||
#include <rtems/score/assert.h>
|
#include <rtems/score/assert.h>
|
||||||
|
|
||||||
void *_Freechain_Extend(
|
void *_Freechain_Extend(
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <rtems/score/threadimpl.h>
|
#include <rtems/score/threadimpl.h>
|
||||||
|
#include <rtems/score/freechainimpl.h>
|
||||||
#include <rtems/score/interr.h>
|
#include <rtems/score/interr.h>
|
||||||
#include <rtems/score/objectimpl.h>
|
#include <rtems/score/objectimpl.h>
|
||||||
#include <rtems/score/scheduler.h>
|
#include <rtems/score/scheduler.h>
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <rtems/score/thread.h>
|
#include <rtems/score/thread.h>
|
||||||
|
#include <rtems/score/freechainimpl.h>
|
||||||
#include <rtems/score/objectimpl.h>
|
#include <rtems/score/objectimpl.h>
|
||||||
#include <rtems/score/wkspace.h>
|
#include <rtems/score/wkspace.h>
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <rtems/score/threadimpl.h>
|
#include <rtems/score/threadimpl.h>
|
||||||
|
#include <rtems/score/freechainimpl.h>
|
||||||
#include <rtems/score/schedulerimpl.h>
|
#include <rtems/score/schedulerimpl.h>
|
||||||
#include <rtems/score/stackimpl.h>
|
#include <rtems/score/stackimpl.h>
|
||||||
#include <rtems/score/tls.h>
|
#include <rtems/score/tls.h>
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
#include <rtems/score/apimutex.h>
|
#include <rtems/score/apimutex.h>
|
||||||
#include <rtems/score/assert.h>
|
#include <rtems/score/assert.h>
|
||||||
#include <rtems/score/chainimpl.h>
|
#include <rtems/score/chainimpl.h>
|
||||||
|
#include <rtems/score/freechainimpl.h>
|
||||||
#include <rtems/score/isrlock.h>
|
#include <rtems/score/isrlock.h>
|
||||||
#include <rtems/score/schedulerimpl.h>
|
#include <rtems/score/schedulerimpl.h>
|
||||||
#include <rtems/score/stackimpl.h>
|
#include <rtems/score/stackimpl.h>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
#include <tmacros.h>
|
#include <tmacros.h>
|
||||||
#include <rtems/score/chainimpl.h>
|
#include <rtems/score/chainimpl.h>
|
||||||
#include <rtems/score/freechain.h>
|
#include <rtems/score/freechainimpl.h>
|
||||||
|
|
||||||
const char rtems_test_name[] = "SPFREECHAIN 1";
|
const char rtems_test_name[] = "SPFREECHAIN 1";
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user