New function rand()

master
Tomatix 5 years ago
parent 6ab13d679a
commit 362bb2cf3a
  1. 7
      ScriptFunctions/RegisterScriptFunctions.cpp
  2. 23
      ScriptFunctions/ScriptGeneralUtils.cpp
  3. 1
      ScriptFunctions/ScriptGeneralUtils.h

@ -17,10 +17,11 @@ void registerScriptFunctions()
Script::registerUniversalFunction("now", &ScriptFunctions::now);
Script::registerUniversalFunction("subwintype", &ScriptFunctions::subwintype);
Script::registerUniversalFunction("subwinname", &ScriptFunctions::subwinname);
Script::registerUniversalFunction("rand", &ScriptFunctions::rand);
/*
* IRC utilities
*/
/*
* IRC utilities
*/
Script::registerUniversalFunction("userhost", &ScriptFunctions::userhost);
Script::registerUniversalFunction("isupport", &ScriptFunctions::isupport);
}

@ -10,6 +10,7 @@
#include <QInputDialog>
#include <QMessageBox>
#include <QDateTime>
#include <random>
using namespace Builtin::Error;
@ -208,4 +209,26 @@ ValueHolder subwinname(Script&, std::vector<ValueHolder>& args)
return cwin->getButtonText().toStdString();
}
ValueHolder rand(Script& std, std::vector <ValueHolder>& args)
{
if (args.size() != 2)
throwInsufficientParameters("rand", args.size(), 4);
if (args[0].getType() != ValueHolder::Type::Integer)
throwNotANumber("rand", 1);
if (args[1].getType() != ValueHolder::Type::Integer)
throwNotANumber("rand", 2);
int lo = ValueExtract(args[0]).toInt();
int hi = ValueExtract(args[1]).toInt();
static std::random_device device;
static std::mt19937 generator(device());
std::uniform_int_distribution<int> distribution(lo, hi);
return ValueHolder(distribution(generator));
}
}

@ -15,6 +15,7 @@ ValueHolder unixnow(Script& , std::vector<ValueHolder>& args);
ValueHolder now(Script& , std::vector<ValueHolder>& args);
ValueHolder subwintype(Script&, std::vector<ValueHolder>& args);
ValueHolder subwinname(Script&, std::vector<ValueHolder>& args);
ValueHolder rand(Script&, std::vector<ValueHolder>& args);
}
#endif // SCRIPTGENERALUTILS_H

Loading…
Cancel
Save