// Return a random int from min to max, inclusive int randInt(int min, int max) { if (max < min) swap(max, min); static random_device rd; static mt19937 generator(rd()); uniform_int_distribution<> distro(min, max); return distro(generator); }
int main() { std::mt19937 engine; std::uniform_int_distribution<int> distro(0, 127); std::vector<int> list(5000000); for (auto iter = list.begin(); iter != list.end(); ++iter) { *iter = distro(engine); } auto bucketSorted = list; auto qsorted = list; auto now = std::chrono::system_clock::now(); bucketSort(bucketSorted.begin(), bucketSorted.end()); auto then = std::chrono::system_clock::now(); auto diff1 = std::chrono::duration_cast<std::chrono::microseconds>(then - now).count(); now = std::chrono::system_clock::now(); std::sort(qsorted.begin(), qsorted.end()); then = std::chrono::system_clock::now(); auto diff2 = std::chrono::duration_cast<std::chrono::microseconds>(then - now).count(); int i = 0; /*for(auto itr : bucketSorted) { ++i; if (i % 5 == 0) std::cout << std::endl; std::cout << std::setw(5) << itr; }*/ std::cout << std::endl; std::cout << "Bucket sort took: " << diff1 << " microsecs." << std::endl; std::cout << "std::sort took: " << diff2 << " microsecs." << std::endl; return 0; }
QString getLinuxDistribution() { #if defined(HAVE_POPEN) && defined(HAVE_PCLOSE) { QString distro(getOutputOf("lsb_release -d").trimmed()); QString prefix("Description:"); if(distro.startsWith(prefix)) { distro = distro.mid(prefix.length()).trimmed(); } if(!distro.isEmpty()) { QString codename(getOutputOf("lsb_release -c").trimmed()); QString prefix("Codename:"); if(codename.startsWith(prefix)) { codename = codename.mid(prefix.length()).trimmed(); } if(!codename.isEmpty() && codename != "n/a") { distro += " ("; distro += codename; distro += ")"; } return distro; } } #endif // Fallback for older / non-LSB-compliant distros. // Release file list taken from http://linuxmafia.com/faq/Admin/release-files.html const char * release_files[] = { "/etc/annvix-release", "/etc/arch-release", "/etc/arklinux-release", "/etc/aurox-release", "/etc/blackcat-release", "/etc/cobalt-release", "/etc/conectiva-release", "/etc/fedora-release", "/etc/gentoo-release", "/etc/immunix-release", "/etc/lfs-release", "/etc/linuxppc-release", "/etc/mandriva-release", "/etc/mandrake-release", "/etc/mandakelinux-release", "/etc/mklinux-release", "/etc/nld-release", "/etc/pld-release", "/etc/slackware-release", "/etc/e-smith-release", "/etc/release", "/etc/sun-release", "/etc/SuSE-release", "/etc/novell-release", "/etc/sles-release", "/etc/tinysofa-release", "/etc/turbolinux-release", "/etc/ultrapenguin-release", "/etc/UnitedLinux-release", "/etc/va-release", "/etc/yellowdog-release", "/etc/debian_release", "/etc/redhat-release", }; const char * version_files[][2] = { { "/etc/debian_version", "Debian " }, { "/etc/knoppix_version", "Knoppix " }, { "/etc/redhat_version", "RedHat " }, { "/etc/slackware-version", "Slackware " }, }; const char * lsb_release = "/etc/lsb-release"; for(size_t i = 0; i < ARRAY_SIZE(release_files); i++) { QFile file(release_files[i]); if(file.exists()) { file.open(QIODevice::ReadOnly); QString distro(QString(file.readAll()).trimmed()); file.close(); if(!distro.isEmpty()) { return distro; } } } for(size_t i = 0; i < ARRAY_SIZE(version_files); i++) { QFile file(version_files[i][0]); if(file.exists()) { file.open(QIODevice::ReadOnly); QString distro(version_files[i][1] + QString(file.readAll()).trimmed()); file.close(); if(!distro.isEmpty()) { return distro; } } } QFile file(lsb_release); if(file.exists()) { file.open(QIODevice::ReadOnly); QString distro(QString(file.readAll()).trimmed()); file.close(); QString prefix("DISTRIB_ID=\""); QString suffix("\""); if(distro.startsWith(prefix) && distro.endsWith(suffix)) { distro = distro.mid( prefix.length(), distro.length() - prefix.length() - suffix.length() ).trimmed(); } return distro; } return QString(); }
f32 Random::randFloat() { std::uniform_real_distribution<f32> distro(0.0f, 1.0f); auto result = distro(m_randEngine); return result; }
i32 Random::randInt(i32 a, i32 b) { std::uniform_int_distribution<i32> distro(a, b); auto result = distro(m_randEngine); return result; }