mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-07-26 16:05:48 -04:00
added patience plugin
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@2245 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
024e7f4b44
commit
0b78ed6ff8
430 changed files with 7336 additions and 0 deletions
77
plugins/patience_plugin/Patience/Random.cpp
Normal file
77
plugins/patience_plugin/Patience/Random.cpp
Normal file
|
@ -0,0 +1,77 @@
|
|||
#include "Random.h"
|
||||
#include <QtGlobal>
|
||||
#include <QDateTime>
|
||||
#include <QDebug>
|
||||
#include <QObject>
|
||||
#include <climits>
|
||||
#include <cstdlib>
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace Random
|
||||
{
|
||||
|
||||
int random(int min, int max)
|
||||
{
|
||||
int ergebnis = 0;
|
||||
unsigned int differenz = 0;
|
||||
unsigned int zufall = qrand();
|
||||
|
||||
// min muss kleiner als max sein
|
||||
if (min < max)
|
||||
{
|
||||
// die differenz zwischen min und max berechnen
|
||||
if (min < 0)
|
||||
{
|
||||
differenz = max + (0 - min);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
differenz = max - min;
|
||||
}
|
||||
|
||||
// dafuer sorgen, das auch der max als ergebnis moeglich ist. jedoch nur, wenn differenz kleiner als UINT_MAX ist !
|
||||
if (differenz < UINT_MAX) differenz++;
|
||||
|
||||
// wenn die differenz groesser als RAND_MAX ist und RAND_MAX kleiner als UINT_MAX ist zufall durch addition zusaetzlicher zufallszahlen vergroessern
|
||||
if (differenz > RAND_MAX && RAND_MAX < UINT_MAX)
|
||||
{
|
||||
// wie oft passt RAND_MAX in ULONG_MAX ?
|
||||
int schleifen = UINT_MAX / RAND_MAX;
|
||||
|
||||
// so oft, wie RAND_MAX in UINT_MAX passt die schleife durchlaufen lassen. dabei beruecksichtigen, das eine abfrage bereits erledigt ist
|
||||
for (register int idx = 1; idx < schleifen; idx++) zufall += qrand();
|
||||
}
|
||||
|
||||
// zufall in den bereich der differenz bringen
|
||||
if (zufall > differenz)
|
||||
{
|
||||
zufall = zufall % differenz;
|
||||
}
|
||||
|
||||
ergebnis = min + zufall;
|
||||
}
|
||||
|
||||
// wenn min gleich max ist, ist onehin nur ein wert moeglich
|
||||
else if (min == max)
|
||||
{
|
||||
ergebnis = min;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
qDebug() << QObject::tr("min is bigger than max !");
|
||||
|
||||
exit(1);
|
||||
}
|
||||
|
||||
return ergebnis;
|
||||
}
|
||||
|
||||
void initialisiere()
|
||||
{
|
||||
// den zufallssimulator initialisieren
|
||||
qsrand(QDateTime::currentDateTime().toTime_t() + QTime::currentTime().msec());
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue