chxavplaylist.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:3k
源码类别:

Symbian

开发平台:

C/C++

  1. /************************************************************************
  2.  * chxavplaylist.cpp
  3.  * -----------------
  4.  *
  5.  * Synopsis:
  6.  *
  7.  * Target:
  8.  * Symbian OS
  9.  *
  10.  *
  11.  * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
  12.  *
  13.  ************************************************************************/
  14. // Standard includes...
  15. #include <limits.h>
  16. // Includes from this project...
  17. #include "chxavrandom.h"
  18. #include "chxavvector.h"
  19. #include "chxavtimevalue.h"
  20. #include "chxavplaylist.h"
  21. CHXAvPlaylist::CHXAvPlaylist() : m_default("")
  22. {}
  23. CHXAvPlaylist::~CHXAvPlaylist()
  24. {}
  25. void CHXAvPlaylist::Append(const CHXAvURLRep& url)
  26. {
  27.     int n = m_urls.Nelements();
  28.     m_urls.Resize(n+1);
  29.     m_urls[n] = url;
  30. }
  31. void CHXAvPlaylist::Shuffle()
  32. {
  33.     if (Length() > 2)
  34.     {
  35. CHXAvURLRep empty;
  36. CHXAvVector<CHXAvURLRep> shuffled(Length());
  37. CHXAvTimeValue now;
  38. CHXAvTimeValue::now(now);
  39. RandomSequence r(now.usec());
  40. unsigned int div = RandomSequence::RandomMax / Length();
  41. for (int i = 0; i < Length(); ++i)
  42. {
  43.     int slot = r.Random() / div;
  44.     while (shuffled[slot] != empty)
  45. slot = (slot + 1) % Length();
  46.     shuffled[slot] = m_urls[i];
  47. }
  48. m_urls = shuffled;
  49.     }
  50. }
  51. int CHXAvPlaylist::Length() const
  52. {
  53.     return m_urls.Nelements();
  54. }
  55. CHXAvPlaylistItr::CHXAvPlaylistItr(const CHXAvPlaylist& pl)
  56.     : m_list(pl),
  57.       m_current(0),
  58.       m_loop(false),
  59.       m_end(false)
  60. {}
  61. CHXAvPlaylistItr::CHXAvPlaylistItr(const CHXAvPlaylist& pl, int current)
  62.     : m_list(pl),
  63.       m_current(current),
  64.       m_loop(false),
  65.       m_end(false)
  66. {}
  67. CHXAvPlaylistItr::~CHXAvPlaylistItr()
  68. {}
  69. void CHXAvPlaylistItr::Loop(bool on)
  70. {
  71.     m_loop = on;
  72. }
  73. bool CHXAvPlaylistItr::Loop() const
  74. {
  75.     return m_loop;
  76. }
  77. void CHXAvPlaylistItr::Next()
  78. {
  79.     m_end = false;
  80.     if (m_current < (m_list.Length() - 1))
  81. ++m_current;
  82.     else if (m_loop)
  83. m_current = 0;
  84.     else
  85. m_end = true;
  86. }
  87. void CHXAvPlaylistItr::Prev()
  88. {
  89.     m_end = false;
  90.     if (m_current > 0)
  91. --m_current;
  92.     else if (m_loop)
  93. m_current = m_list.Length() - 1;
  94.     else
  95. m_end = true;
  96. }
  97. const CHXAvURLRep& CHXAvPlaylistItr::Current() const
  98. {
  99.     if (m_current >= 0 && m_current < m_list.Length())
  100. return m_list.m_urls[m_current];
  101.     return m_list.m_default;
  102. }
  103. bool CHXAvPlaylistItr::More() const
  104. {
  105.     return (!m_end);
  106. }
  107. void CHXAvPlaylistItr::ResetBegin()
  108. {
  109.     m_end = false;
  110.     m_current = 0;
  111. }
  112. void CHXAvPlaylistItr::ResetEnd()
  113. {
  114.     m_end = false;
  115.     m_current = m_list.Length() - 1;
  116. }
  117. int CHXAvPlaylistItr::Offset() const
  118. {
  119.     return m_current;
  120. }
  121. bool CHXAvPlaylistItr::operator==(const CHXAvPlaylistItr& pl) const
  122. {
  123.     return (m_current == pl.m_current);
  124. }
  125. bool CHXAvPlaylistItr::operator!=(const CHXAvPlaylistItr& pl) const
  126. {
  127.     return !(*this == pl);
  128. }
  129. bool CHXAvPlaylistItr::operator<=(const CHXAvPlaylistItr& pl) const
  130. {
  131.     return (m_current <= pl.m_current);
  132. }
  133. bool CHXAvPlaylistItr::operator>=(const CHXAvPlaylistItr& pl) const
  134. {
  135.     return (m_current >= pl.m_current);
  136. }