chxcharstack.cpp
Upload User: zhongxx05
Upload Date: 2007-06-06
Package Size: 33641k
Code Size: 2k
Category:

Symbian

Development Platform:

C/C++

  1. #include "chxcharstack.h"
  2. #include "hlxclib/string.h"
  3. CHXCharStack::CHXCharStack(IUnknown* pUnk) :
  4.     m_ulOffset(0),
  5.     m_pBuffer(0),
  6.     m_pCCF(0)
  7. {
  8.     if (pUnk &&
  9. (HXR_OK == pUnk->QueryInterface(IID_IHXCommonClassFactory,
  10. (void**)&m_pCCF)))
  11.     {
  12. m_pCCF->CreateInstance(IID_IHXBuffer, (void**)&m_pBuffer);
  13.     }
  14. }
  15. CHXCharStack::~CHXCharStack()
  16. {
  17.     HX_RELEASE(m_pBuffer);
  18.     HX_RELEASE(m_pCCF);
  19. }
  20. HX_RESULT CHXCharStack::AddChar(char ch)
  21. {
  22.     HX_RESULT res = HXR_UNEXPECTED;
  23.     if (m_pBuffer)
  24.     {
  25. ULONG32 ulCurrentSize = m_pBuffer->GetSize();
  26. if (m_ulOffset >= ulCurrentSize)
  27. {
  28.     ULONG32 ulNewSize = (ulCurrentSize) ? 2 * ulCurrentSize : 1;
  29.     res = m_pBuffer->SetSize(ulNewSize);
  30. }
  31. else
  32. {
  33.     res = HXR_OK;
  34. }
  35. if (HXR_OK == res)
  36. {
  37.     ((char*)m_pBuffer->GetBuffer())[m_ulOffset++] = ch;
  38. }
  39.     }
  40.     return res;
  41. }
  42. HX_RESULT CHXCharStack::Finish(REF(IHXBuffer*) pBuf)
  43. {
  44.     HX_RESULT res = HXR_UNEXPECTED;
  45.     pBuf = 0;
  46.     if (m_pBuffer && m_pCCF)
  47.     {
  48. res = AddChar('');
  49. if (HXR_OK == res)
  50. {
  51.     ULONG32 len = strlen((char*)m_pBuffer->GetBuffer()) + 1;
  52.     
  53.     res = m_pCCF->CreateInstance(IID_IHXBuffer, (void**)&pBuf);
  54.     if ((HXR_OK == res) && (HXR_OK == (res = pBuf->SetSize(len))))
  55.     {
  56. strcpy((char*)pBuf->GetBuffer(),(char*)m_pBuffer->GetBuffer());
  57.     }
  58.     else
  59.     {
  60. HX_RELEASE(pBuf);
  61.     }
  62. }
  63.     }
  64.     return res;
  65. }
  66. void CHXCharStack::Reset()
  67. {
  68.     m_ulOffset = 0;
  69. }