libsaria: More next() tuning

Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
Bryan Schumaker 2012-05-07 08:11:11 -04:00
parent c0fdcb4d93
commit c3bb6119e5
1 changed files with 12 additions and 6 deletions

View File

@ -50,19 +50,25 @@ namespace libsaria
Track *Playlist::pick_random()
{
unsigned int n, size = get_size();
unsigned int n, range = get_size();
unsigned int min = 1;
if (size == 0)
if (range == 0)
return NULL;
if (size == 1) {
if (range == 1) {
cur = plist.begin();
return picked_next();
}
if (size > 10)
size /= 2;
n = rand() % size;
if (range > 10) {
min = (range / 10) + (range % 5);
range = (range / 2);
} else
range *= 2;
n = min + (rand() % range);
//println("min: %u, max: %u, n: %u", min, min + range, n);
for (unsigned int i = 0; i < n; i++)
incr_iter();