chxavbuffer.cpp
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:2k
源码类别:

Symbian

开发平台:

Visual C++

  1. /*============================================================================*
  2.  *
  3.  * (c) 1995-2002 RealNetworks, Inc. Patents pending. All rights reserved.
  4.  *
  5.  *============================================================================*/
  6.  
  7. #include "chxavbuffer.h"
  8. #include "chxavmemutil.h"
  9. #include "chxavminmax.h"
  10. CHXAvBufferRep::CHXAvBufferRep(const CHXAvBufferRep& rep)
  11.     : m_pData(new char[rep.m_maxLen]),
  12.       m_len(rep.m_len),
  13.       m_maxLen(rep.m_maxLen)
  14. {
  15.     if (rep.m_len > 0)
  16. CHXAvMemUtil::MemCopy(m_pData, rep.m_pData, rep.m_len);
  17. }
  18. CHXAvBufferRep& CHXAvBufferRep::operator=(const CHXAvBufferRep& rep)
  19. {
  20.     if (&rep != this)
  21.     {
  22. delete [] m_pData;
  23. m_pData = new char[rep.m_maxLen]; //XXXLCM can fail
  24. if (rep.m_len > 0)
  25.     CHXAvMemUtil::MemCopy(m_pData, rep.m_pData, rep.m_len);
  26.     }
  27.     return *this;
  28. }
  29. void CHXAvBufferRep::Grow(int size)
  30. {
  31.     if (m_maxLen < size)
  32.     {
  33. m_maxLen = 1;
  34. for (; m_maxLen <= size; m_maxLen <<= 1)
  35.     ;
  36. char* pData = new char[m_maxLen];
  37. if (m_pData && m_len > 0)
  38.     CHXAvMemUtil::MemCopy(pData, m_pData, m_len);
  39. delete [] m_pData;
  40. m_pData = pData;
  41.     }
  42. }
  43. void CHXAvBufferRep::Copy(const char* pBuf, int size)
  44. {
  45.     if (size > 0)
  46.     {
  47. if (m_maxLen < size)
  48. {
  49.     m_maxLen = 1;
  50.     for (; m_maxLen <= size; m_maxLen <<= 1)
  51. ;
  52.     delete [] m_pData;
  53.     m_pData = new char[m_maxLen];
  54. }
  55. CHXAvMemUtil::MemCopy(m_pData, pBuf, size);
  56.     }
  57.     m_len = max(size, 0);
  58. }
  59. void CHXAvBufferRep::Append(const char* pBuf, int size)
  60. {
  61.     if (size > 0)
  62.     {
  63. if (m_len + size > m_maxLen)
  64.     Grow(m_len + size);
  65. CHXAvMemUtil::MemCopy(m_pData + m_len, pBuf, size);
  66. m_len += size;
  67.     }
  68. }