BAG.CXX
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:3k
源码类别:

Windows编程

开发平台:

Visual C++

  1. //+---------------------------------------------------------------------------
  2. //
  3. //  Copyright (C) 1992 - 1997 Microsoft Corporation.
  4. //
  5. //  File:       bag.cxx
  6. //
  7. //  Contents:   Bag for Html parsing elements
  8. //
  9. //  Classes:    CHtmlElementBag
  10. //
  11. //----------------------------------------------------------------------------
  12. #include <pch.cxx>
  13. #pragma hdrstop
  14. #include <bag.hxx>
  15. #include <htmlelem.hxx>
  16. //+-------------------------------------------------------------------------
  17. //
  18. //  Class:      CHtmlElemBagEntry::CHtmlElemBagEntry
  19. //
  20. //  Purpose:    Constructor
  21. //
  22. //--------------------------------------------------------------------------
  23. CHtmlElemBagEntry::CHtmlElemBagEntry()
  24.     : _pHtmlElement(0),
  25.       _eTokType(GenericToken)
  26. {
  27. }
  28. //+-------------------------------------------------------------------------
  29. //
  30. //  Class:      CHtmlElemBagEntry::~CHtmlElemBagEntry
  31. //
  32. //  Purpose:    Destructor
  33. //
  34. //--------------------------------------------------------------------------
  35. CHtmlElemBagEntry::~CHtmlElemBagEntry()
  36. {
  37.     delete _pHtmlElement;
  38. }
  39. //+-------------------------------------------------------------------------
  40. //
  41. //  Method:     CHtmlElementBag::CHtmlElementBag
  42. //
  43. //  Synopsis:   Constructor
  44. //
  45. //  Arguments:  [cElems]  -- Count of Html elements in bag
  46. //
  47. //--------------------------------------------------------------------------
  48. CHtmlElementBag::CHtmlElementBag( unsigned cElems )
  49.     : _uMaxSize(cElems),
  50.       _uCurSize(0)
  51. {
  52.     _aBagEntry = newk(mtNewX, NULL) CHtmlElemBagEntry[cElems];
  53. }
  54. //+-------------------------------------------------------------------------
  55. //
  56. //  Method:     CHtmlElementBag::~CHtmlElementBag
  57. //
  58. //  Synopsis:   Destructor
  59. //
  60. //--------------------------------------------------------------------------
  61. CHtmlElementBag::~CHtmlElementBag()
  62. {
  63.     delete[] _aBagEntry;
  64. }
  65. //+-------------------------------------------------------------------------
  66. //
  67. //  Method:     CHtmlElementBag::AddElement
  68. //
  69. //  Synopsis:   Add a new mapping the bag
  70. //
  71. //  Arguments:  [eHtmlToken]  -- token type
  72. //              [pHtmlElem] -- Html element corresponding to eHtmlToken
  73. //
  74. //--------------------------------------------------------------------------
  75. void CHtmlElementBag::AddElement( HtmlTokenType eTokType,
  76.                                   CHtmlElement *pHtmlElement )
  77. {
  78.     Win4Assert( _uCurSize < _uMaxSize );
  79.     _aBagEntry[_uCurSize].SetTokenType( eTokType );
  80.     _aBagEntry[_uCurSize].SetHtmlElement( pHtmlElement );
  81.     _uCurSize++;
  82. }
  83. //+-------------------------------------------------------------------------
  84. //
  85. //  Method:     CHtmlElementBag::QueryElement
  86. //
  87. //  Synopsis:   Retrieve the Html element corresponding to given token type
  88. //
  89. //  Arguments:  [eHtmlToken]  -- token type
  90. //
  91. //--------------------------------------------------------------------------
  92. CHtmlElement *CHtmlElementBag::QueryElement( HtmlTokenType eTokType )
  93. {
  94.     for (unsigned i=0; i<_uCurSize; i++)
  95.     {
  96.         if ( _aBagEntry[i].GetTokenType() == eTokType )
  97.             return _aBagEntry[i].GetHtmlElement();
  98.     }
  99.     htmlDebugOut(( DEB_ERROR,
  100.                  "Unknown Html token type 0x%x in CHtmlElementBag::QueryElementn",
  101.                  eTokType ));
  102.     Win4Assert( !"Cannot map Html token type" );
  103.     return 0;
  104. }