chxavparseiterator.h
上传用户: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. #ifndef _PARSE_ITERATOR_H
  8. #define _PARSE_ITERATOR_H
  9. #include "chxbody.h"
  10. #include "hxstring.h"
  11. #include "chxavnextline.h"
  12. template<class Parser>
  13. class CHXAvParseIterator : public CHXBody {
  14. public:
  15.     CHXAvParseIterator(const CHXString& file = "");
  16.     ~CHXAvParseIterator();
  17.     bool More() const;
  18.     void Next();
  19.     const Parser& Current() const;
  20.     void Reset();
  21.     int LineNum() const;
  22. private:
  23.     CHXAvNextLine m_nextLine;
  24.     Parser m_current;
  25. };
  26. template<class Parser>
  27. CHXAvParseIterator<Parser>::CHXAvParseIterator(const CHXString& file)
  28.   : m_nextLine(file)
  29. {
  30.     if (m_nextLine.Open())
  31. Next();
  32. }
  33. template<class Parser>
  34. CHXAvParseIterator<Parser>::~CHXAvParseIterator()
  35. {
  36.     m_nextLine.Close();
  37. }
  38. template<class Parser>
  39. bool CHXAvParseIterator<Parser>::More() const
  40. {
  41.     return m_current.Valid();
  42. }
  43. template<class Parser>
  44. const Parser& CHXAvParseIterator<Parser>::Current() const
  45. {
  46.     return m_current;
  47. }
  48. template<class Parser>
  49. void CHXAvParseIterator<Parser>::Next()
  50. {
  51.     m_current.Reset();
  52.     if (m_nextLine.IsOpen() && !m_nextLine.End())
  53.     {
  54. CHXString line;
  55. while (m_nextLine.GetLine(line) && !m_current.Parse(line))
  56.     ;
  57.     }
  58. }
  59. template<class Parser>
  60. void CHXAvParseIterator<Parser>::Reset()
  61. {
  62.     if (m_nextLine.Reset())
  63. Next();
  64. }
  65. template<class Parser>
  66. int CHXAvParseIterator<Parser>::LineNum() const
  67. {
  68.     return m_nextLine.LineNum();
  69. }
  70. #endif // _PARSE_ITERATOR_H