⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mstack.c

📁 多任务下的数据结构与算法的源码
💻 C
字号:
/*
 * Copyright (c) 2000-2008
 * Author: Weiming Zhou
 *
 * Permission to use, copy, modify, distribute and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appear in all copies and
 * that both that copyright notice and this permission notice appear
 * in supporting documentation.  
 */

#ifdef _WIN32
#include <windows.h>
#endif
#include "CapiGlobal.h"
#include "Stack.h"
#include "MStack.h"


/**	多任务栈的创建函数

	@param	UINT uStackSize - 栈的大小	
	@return	MSTACK * - 成功返回栈指针,失败返回NULL	
*/
MSTACK * MStack_Create(UINT uStackSize)
{
    MSTACK *pMStack = (MSTACK *)malloc(sizeof(MSTACK));
    if ( pMStack != NULL )
    {
        pMStack->pStack = Stack_Create(uStackSize);
        if ( pMStack->pStack != NULL )
        {
            /* 创建锁 */
            pMStack->pLock = LockCreate();
            if ( pMStack->pLock != NULL )
            {
                return pMStack;
            }
            free(pMStack->pStack);
        }
        free(pMStack);
    }
    return NULL;
}


/**	多任务栈的释放函数

	@param	MSTACK * pMStack - 栈指针	
	@param	DESTROYFUNC DestroyFunc - 数据释放回调函数	
	@return	void - 无	
*/
void MStack_Destroy(MSTACK * pMStack, DESTROYFUNC DestroyFunc)
{
    if ( pMStack != NULL )
    {
        Lock(pMStack->pLock);
        Stack_Destroy(pMStack->pStack, DestroyFunc);
        LockClose(pMStack->pLock);

        free(pMStack);
    }
}


/**	多任务栈的弹出操作函数

	@param	MSTACK * pMStack - 栈指针	
	@return	void * - 弹出的数据指针	
*/
void * MStack_Pop( MSTACK * pMStack )
{
    void *pData;

    Lock(pMStack->pLock);
    pData = Stack_Pop(pMStack->pStack);
    Unlock(pMStack->pLock);

    return pData;
}


/**	栈的压入操作函数

	@param	MSTACK * pMStack - 栈指针	
	@param	void *pData - 数据指针	
	@return	INT - CAPI_SUCCESS表示成功,CAIP_FAILED表示失败	
*/
INT MStack_Push( MSTACK * pMStack, void *pData )
{
    INT nRet;

    Lock(pMStack->pLock);
    nRet = Stack_Push(pMStack->pStack, pData);
    Unlock(pMStack->pLock);

    return nRet;
}


/**	判断栈是否是空的

	@param	MSTACK *pMStack - 栈指针	
	@return	INT - 0表示为空,1表示非空	
*/
INT MStack_IsEmpty( MSTACK *pMStack )
{
    INT nRet;

    Lock(pMStack->pLock);
    nRet = Stack_IsEmpty(pMStack->pStack);
    Unlock(pMStack->pLock);
    
    return nRet;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -