From e2de64d6f1beb9e492daf5b886e19933c1fa41dd Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdemultimedia@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kmid/randomlist.cpp | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 kmid/randomlist.cpp (limited to 'kmid/randomlist.cpp') diff --git a/kmid/randomlist.cpp b/kmid/randomlist.cpp new file mode 100644 index 00000000..5ac736a9 --- /dev/null +++ b/kmid/randomlist.cpp @@ -0,0 +1,103 @@ +/************************************************************************** + + randomlist.cpp - Some "random functions" :-) + Copyright (C) 1997,98 Antonio Larrosa Jimenez + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Send comments and bug fixes to larrosa@kde.org + or to Antonio Larrosa, Rio Arnoya, 10 5B, 29006 Malaga, Spain + +***************************************************************************/ +#include "randomlist.h" +#include +#include + +#define RAND_UNIFORM (double)rand()/(double)RAND_MAX + +int random_discrete(double *distrib,int n) +{ + int i=0; + double g=0.0; + double z=0.0; + while ((z==0.0)||(z==1.0)) z=RAND_UNIFORM; + while ((g0) used++; + }; + used--; // k will no longer be used :-) + if (used==0) return; + double piece=distrib[k]/(double)used; + distrib[k]=0.0; + for (i=0;i0) distrib[i]+=piece; +} + +void show_distrib(double *distrib,int n) +{ + printf("("); + for (int j=0;j0) + { + x=random_discrete(distrib,n); + list[x]=i; + i++; + remove_lmn_from_discrete_distrib(x,distrib,n,used); + used--; + }; + delete distrib; + + return list; +} + +int *generate_list(int n) +{ + int *list=new int[n]; + for (int i=0;i