float qansel_hardware_getseed()
{
- #ifdef CLOCK_MONOTONIC
- struct timespec ts;
- clock_gettime(CLOCK_MONOTONIC, &ts);
- float seed = (float)((unsigned long)ts.tv_sec * 1000000000LL + ts.tv_nsec);
- #else
- FILE* f = popen("date +%s", "r");
+ #if defined(_WIN32) || defined(_WIN64)
+ #error "implement windows seed"
+ #elif defined(__linux__)
+ unsigned long long int tsi = 0;
+ FILE* f = fopen("/proc/uptime", "r");
int c;
- int tsl = 0;
char ts[128];
-
+ int tsl = 0;
while ( (c = fgetc(f)) != EOF )
{
- ts[tsl++] = c;
+ if ((c >= '0' && c <= '9') || c == '.')
+ {
+ ts[tsl++] = c;
+ }
+ else
+ {
+ break;
+ }
}
ts[tsl++] = 0;
fclose(f);
- float seed = atof(ts);
+ float seed = atof(ts);
+ return seed;
+ #else
+ #error "Uknown platform"
+ return 0;
#endif
+
}
#ifndef __HARDWARE_H__
#define __HARDWARE_H__
-#include <time.h>
+#include <stdlib.h>
#include <stddef.h>
#if defined(_WIN32) || defined(_WIN64)
#include <windows.h>
#elif defined(__linux__)
+#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
-#elif defined(__APPLE__)
-#include <sys/sysctl.h>
-#endif
-
-#ifndef CLOCK_MONOTONIC
-#include <stdio.h>
-#include <stdlib.h>
+#else
+#error "Unknown platform"
#endif
int qansel___get_core_count();