chxavplaylist.cpp

来自「symbian 下的helix player源代码」· C++ 代码 · 共 168 行

CPP
168
字号
/************************************************************************
 * chxavplaylist.cpp
 * -----------------
 *
 * Synopsis:
 *
 * Target:
 * Symbian OS
 *
 *
 * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
 *
 ************************************************************************/

// Standard includes...
#include <limits.h>

// Includes from this project...
#include "chxavrandom.h"
#include "chxavvector.h"
#include "chxavtimevalue.h"
#include "chxavplaylist.h"

CHXAvPlaylist::CHXAvPlaylist() : m_default("")
{}

CHXAvPlaylist::~CHXAvPlaylist()
{}

void CHXAvPlaylist::Append(const CHXAvURLRep& url)
{
    int n = m_urls.Nelements();
    m_urls.Resize(n+1);
    m_urls[n] = url;
}

void CHXAvPlaylist::Shuffle()
{
    if (Length() > 2)
    {
	CHXAvURLRep empty;
	CHXAvVector<CHXAvURLRep> shuffled(Length());

	CHXAvTimeValue now;
	CHXAvTimeValue::now(now);

	RandomSequence r(now.usec());

	unsigned int div = RandomSequence::RandomMax / Length();
	for (int i = 0; i < Length(); ++i)
	{
	    int slot = r.Random() / div;

	    while (shuffled[slot] != empty)
		slot = (slot + 1) % Length();

	    shuffled[slot] = m_urls[i];
	}
	m_urls = shuffled;
    }
}

int CHXAvPlaylist::Length() const
{
    return m_urls.Nelements();
}

CHXAvPlaylistItr::CHXAvPlaylistItr(const CHXAvPlaylist& pl)
    : m_list(pl),
      m_current(0),
      m_loop(false),
      m_end(false)
{}

CHXAvPlaylistItr::CHXAvPlaylistItr(const CHXAvPlaylist& pl, int current)
    : m_list(pl),
      m_current(current),
      m_loop(false),
      m_end(false)
{}

CHXAvPlaylistItr::~CHXAvPlaylistItr()
{}

void CHXAvPlaylistItr::Loop(bool on)
{
    m_loop = on;
}

bool CHXAvPlaylistItr::Loop() const
{
    return m_loop;
}

void CHXAvPlaylistItr::Next()
{
    m_end = false;

    if (m_current < (m_list.Length() - 1))
	++m_current;
    else if (m_loop)
	m_current = 0;
    else
	m_end = true;
}

void CHXAvPlaylistItr::Prev()
{
    m_end = false;

    if (m_current > 0)
	--m_current;
    else if (m_loop)
	m_current = m_list.Length() - 1;
    else
	m_end = true;
}

const CHXAvURLRep& CHXAvPlaylistItr::Current() const
{
    if (m_current >= 0 && m_current < m_list.Length())
	return m_list.m_urls[m_current];

    return m_list.m_default;
}

bool CHXAvPlaylistItr::More() const
{
    return (!m_end);
}

void CHXAvPlaylistItr::ResetBegin()
{
    m_end = false;
    m_current = 0;
}

void CHXAvPlaylistItr::ResetEnd()
{
    m_end = false;
    m_current = m_list.Length() - 1;
}

int CHXAvPlaylistItr::Offset() const
{
    return m_current;
}

bool CHXAvPlaylistItr::operator==(const CHXAvPlaylistItr& pl) const
{
    return (m_current == pl.m_current);
}

bool CHXAvPlaylistItr::operator!=(const CHXAvPlaylistItr& pl) const
{
    return !(*this == pl);
}

bool CHXAvPlaylistItr::operator<=(const CHXAvPlaylistItr& pl) const
{
    return (m_current <= pl.m_current);
}

bool CHXAvPlaylistItr::operator>=(const CHXAvPlaylistItr& pl) const
{
    return (m_current >= pl.m_current);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?