📄 compo_pool.c
字号:
/*******************************************************************************File name : compo_pool.cDescription : Functions of the data pool ManagerCOPYRIGHT (C) STMicroelectronics 2000.Date Modification Name---- ------------ ----5 May 2004 Creation TM*******************************************************************************//* Includes ----------------------------------------------------------------- */#include <stdlib.h>#include "stddefs.h"#include <string.h>#include "compo_pool.h"/* Private Types ------------------------------------------------------------ *//* Private Constants -------------------------------------------------------- *//* Private Variables -------------------------------------------------------- *//* Private Macros ----------------------------------------------------------- *//* Private Function prototypes ---------------------------------------------- *//* Functions ---------------------------------------------------------------- *//*******************************************************************************Name : stcompo_InitDataPoolDescription : initializes a generic datapoolParameters :Assumptions :Limitations : No error checking is performedReturns :*******************************************************************************/void stcompo_InitDataPool( stcompo_DataPoolDesc_t* DataPool_p, U32 NbElem, U32 ElemSize, void* ElemArray_p, void** HandleArray_p){ U32 i; DataPool_p->NbFreeElem = NbElem; DataPool_p->NbElem = NbElem; DataPool_p->ElemSize = ElemSize; DataPool_p->ElemArray_p = ElemArray_p; DataPool_p->HandleArray_p = HandleArray_p; /* Initialize Handle array content*/ for( i=0; i < NbElem; i++) DataPool_p->HandleArray_p[i] = (void*) ((U32)ElemArray_p + ElemSize*(NbElem - 1 -i));}/*******************************************************************************Name : stcompo_GetElementDescription : gets an element from the data pool returning its handleParameters :Assumptions :Limitations :Returns :*******************************************************************************/ST_ErrorCode_t stcompo_GetElement( stcompo_DataPoolDesc_t* DataPool_p, void** Handle_p){ if(DataPool_p->NbFreeElem > 0) { *Handle_p = (void*) DataPool_p->HandleArray_p[DataPool_p->NbFreeElem - 1]; DataPool_p->HandleArray_p[DataPool_p->NbFreeElem - 1] = NULL; DataPool_p->NbFreeElem--; return(ST_NO_ERROR); } else { return(ST_ERROR_NO_FREE_HANDLES); }}/*******************************************************************************Name : stcompo_ReleaseElementDescription :Parameters :Assumptions :Limitations : upper level must ensure an handle is released only once upper level must also ensure handle validityReturns :*******************************************************************************/ST_ErrorCode_t stcompo_ReleaseElement(stcompo_DataPoolDesc_t* DataPool_p, void* Handle){ if ( Handle == NULL ) { return (ST_ERROR_INVALID_HANDLE); } if (DataPool_p->NbFreeElem == DataPool_p->NbElem) { return (ST_ERROR_NO_FREE_HANDLES); } DataPool_p->NbFreeElem++; DataPool_p->HandleArray_p[DataPool_p->NbFreeElem - 1] = Handle; return(ST_NO_ERROR);}/* End of compo_pool.c */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -