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/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
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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" {
|
||||
@@ -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
|
||||
|
||||
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"
|
||||
#endif
|
||||
|
||||
#include <rtems/score/freechain.h>
|
||||
#include <rtems/score/freechainimpl.h>
|
||||
#include <rtems/score/assert.h>
|
||||
|
||||
void *_Freechain_Extend(
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#endif
|
||||
|
||||
#include <rtems/score/threadimpl.h>
|
||||
#include <rtems/score/freechainimpl.h>
|
||||
#include <rtems/score/interr.h>
|
||||
#include <rtems/score/objectimpl.h>
|
||||
#include <rtems/score/scheduler.h>
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#endif
|
||||
|
||||
#include <rtems/score/thread.h>
|
||||
#include <rtems/score/freechainimpl.h>
|
||||
#include <rtems/score/objectimpl.h>
|
||||
#include <rtems/score/wkspace.h>
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#endif
|
||||
|
||||
#include <rtems/score/threadimpl.h>
|
||||
#include <rtems/score/freechainimpl.h>
|
||||
#include <rtems/score/schedulerimpl.h>
|
||||
#include <rtems/score/stackimpl.h>
|
||||
#include <rtems/score/tls.h>
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <rtems/score/apimutex.h>
|
||||
#include <rtems/score/assert.h>
|
||||
#include <rtems/score/chainimpl.h>
|
||||
#include <rtems/score/freechainimpl.h>
|
||||
#include <rtems/score/isrlock.h>
|
||||
#include <rtems/score/schedulerimpl.h>
|
||||
#include <rtems/score/stackimpl.h>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
#include <tmacros.h>
|
||||
#include <rtems/score/chainimpl.h>
|
||||
#include <rtems/score/freechain.h>
|
||||
#include <rtems/score/freechainimpl.h>
|
||||
|
||||
const char rtems_test_name[] = "SPFREECHAIN 1";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user