chxavbuffer.cpp

来自「symbian 下的helix player源代码」· C++ 代码 · 共 75 行

CPP
75
字号
/*============================================================================*
 *
 * (c) 1995-2002 RealNetworks, Inc. Patents pending. All rights reserved.
 *
 *============================================================================*/
 
#include "chxavbuffer.h"
#include "chxavmemutil.h"
#include "chxavminmax.h"

CHXAvBufferRep::CHXAvBufferRep(const CHXAvBufferRep& rep)
    : m_pData(new char[rep.m_maxLen]),
      m_len(rep.m_len),
      m_maxLen(rep.m_maxLen)
{
    if (rep.m_len > 0)
	CHXAvMemUtil::MemCopy(m_pData, rep.m_pData, rep.m_len);
}

CHXAvBufferRep& CHXAvBufferRep::operator=(const CHXAvBufferRep& rep)
{
    if (&rep != this)
    {
	delete [] m_pData;
	m_pData = new char[rep.m_maxLen]; //XXXLCM can fail
	if (rep.m_len > 0)
	    CHXAvMemUtil::MemCopy(m_pData, rep.m_pData, rep.m_len);
    }
    return *this;
}

void CHXAvBufferRep::Grow(int size)
{
    if (m_maxLen < size)
    {
	m_maxLen = 1;
	for (; m_maxLen <= size; m_maxLen <<= 1)
	    ;
	char* pData = new char[m_maxLen];
	if (m_pData && m_len > 0)
	    CHXAvMemUtil::MemCopy(pData, m_pData, m_len);
	delete [] m_pData;
	m_pData = pData;
    }
}

void CHXAvBufferRep::Copy(const char* pBuf, int size)
{
    if (size > 0)
    {
	if (m_maxLen < size)
	{
	    m_maxLen = 1;
	    for (; m_maxLen <= size; m_maxLen <<= 1)
		;
	    delete [] m_pData;
	    m_pData = new char[m_maxLen];
	}
	CHXAvMemUtil::MemCopy(m_pData, pBuf, size);
    }
    m_len = max(size, 0);
}

void CHXAvBufferRep::Append(const char* pBuf, int size)
{
    if (size > 0)
    {
	if (m_len + size > m_maxLen)
	    Grow(m_len + size);
	CHXAvMemUtil::MemCopy(m_pData + m_len, pBuf, size);
	m_len += size;
    }
}

⌨️ 快捷键说明

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