Ejemplo n.º 1
0
TInt32 CPipe::ReturnMsgBuff(TUChar *pMsg,TUInt32 len)
{
	TUInt32 dataLen = GetDataLen();
	if (len > dataLen)
    {
        return INPUT_PARA_ERROR;
    }
    if (m_pRear != pMsg)
    {
        return SUCCESS;
    }
    TUChar * pPipeRear = (m_pMemPool + m_memPoolSize);
    TUChar *pNewRear = (TUChar*)m_pRear;
    pNewRear += len;
    //m_pRear += len;
#ifdef _DEBUG
    if (pNewRear > pPipeRear)
    {
        pNewRear = m_pMemPool + (pPipeRear - m_pRear);
        //cout<<"Error in CPipe::PrepareMsg, wrong format!"<<endl;
        return INPUT_PARA_ERROR;
    }
#endif
    if (pNewRear == pPipeRear)
    {
        m_pRear = m_pMemPool;
    }
    else
    {
        m_pRear = pNewRear;
    }
    return SUCCESS;

}
Ejemplo n.º 2
0
//读数据到pData
TInt32 CPipe::ReadData(TUChar *pTo,TUInt32 len)
{
    TUInt32 dataLen = GetDataLen();
    if (len > dataLen)
    {
        return OUT_OF_RANGE;
    }
    TUChar *pRear = (TUChar *)(m_pRear);
    TUChar *pHeader = (TUChar *)(m_pHeader);
    
#ifdef _DEBUG
    bool needRecycle = false;
#endif
    if (pRear < pHeader)
    {
        dataLen = (pHeader - pRear);
    }
    else
    {
#ifdef _DEBUG
        needRecycle = true;
#endif
        dataLen = (m_pMemPool + m_memPoolSize - pRear);
    }
    
    if (dataLen >= len)
    {
        memcpy(pTo,pRear,len);
        pRear += len;
        if (pRear == (m_pMemPool + m_memPoolSize))
        {
            m_pRear = m_pMemPool;
        }
        else
        {
            m_pRear = pRear;
        }
    }
    else
    {
#ifdef _DEBUG
        if (!needRecycle)
        {
            return FAIL;
        }
#endif
        memcpy(pTo,pRear,dataLen);
        TInt32 remainLen = len - dataLen;
        memcpy((pTo+dataLen),m_pMemPool,remainLen);
        m_pRear =  m_pMemPool + remainLen;
    }
    return len;
}
Ejemplo n.º 3
0
TUChar *CPipe::GetData(TUInt32& len)
{
    if (GetDataLen() < len)
    {
    	return NULL;
    }
	TUChar *pRear = (TUChar *)(m_pRear);
	TUChar *pHeader = (TUChar *)(m_pHeader);
    if (pRear <= pHeader)
    {
        len = pHeader - pRear;
    }
    else 
    {
        len = (m_pMemPool + m_memPoolSize - pRear);
    }
	
    return pRear;


}
Ejemplo n.º 4
0
TUChar *CPipe::Peek(TUChar *pBuffer,TUInt32 len)
{
    TUInt32 result = GetDataLen();
    if (result < len)
    {
        return NULL;
    }
    TUChar *pHeader = (TUChar *)m_pHeader;
    TUChar *pRear = (TUChar *)m_pRear;
    
    if (pHeader >= pRear)
    {
        TUInt32 buffLen = pHeader - pRear;
        if (len <= buffLen)
        {
            //memcpy(pBuffer,m_pRear,len);
            return (TUChar*)(pRear);
        }
        else
        {
            //not enough data;something wrong
            return NULL;
        }
    }
    else
    {
        TUInt32 buffLen = m_pMemPool + m_memPoolSize - pRear;
        if (buffLen >= len)
        {
            //memcpy(pBuffer,(const void*)(m_pRear),len);
            return (TUChar*)(pRear);
        }
        else
        {
            memcpy(pBuffer,(const void*)(pRear),buffLen);
            memcpy(pBuffer + buffLen,m_pMemPool,(len - buffLen));
            return pBuffer;
        }
    }
}
Ejemplo n.º 5
0
bool DVFrame::IsComplete( void )
{
	return GetDataLen() == GetFrameSize();
}