From 064d4462d3890fd5dda5c7845119e1a3854d477b Mon Sep 17 00:00:00 2001
From: Joseph Redmon <pjreddie@gmail.com>
Date: Thu, 26 Nov 2015 21:45:12 +0000
Subject: [PATCH] stuff
---
src/utils.c | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 114 insertions(+), 5 deletions(-)
diff --git a/src/utils.c b/src/utils.c
index 1db8101..3121ef6 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -8,6 +8,108 @@
#include "utils.h"
+void sorta_shuffle(void *arr, size_t n, size_t size, size_t sections)
+{
+ size_t i;
+ for(i = 0; i < sections; ++i){
+ size_t start = n*i/sections;
+ size_t end = n*(i+1)/sections;
+ size_t num = end-start;
+ shuffle(arr+(start*size), num, size);
+ }
+}
+
+void shuffle(void *arr, size_t n, size_t size)
+{
+ size_t i;
+ void *swp = calloc(1, size);
+ for(i = 0; i < n-1; ++i){
+ size_t j = i + rand()/(RAND_MAX / (n-i)+1);
+ memcpy(swp, arr+(j*size), size);
+ memcpy(arr+(j*size), arr+(i*size), size);
+ memcpy(arr+(i*size), swp, size);
+ }
+}
+
+void del_arg(int argc, char **argv, int index)
+{
+ int i;
+ for(i = index; i < argc-1; ++i) argv[i] = argv[i+1];
+ argv[i] = 0;
+}
+
+int find_arg(int argc, char* argv[], char *arg)
+{
+ int i;
+ for(i = 0; i < argc; ++i) {
+ if(!argv[i]) continue;
+ if(0==strcmp(argv[i], arg)) {
+ del_arg(argc, argv, i);
+ return 1;
+ }
+ }
+ return 0;
+}
+
+int find_int_arg(int argc, char **argv, char *arg, int def)
+{
+ int i;
+ for(i = 0; i < argc-1; ++i){
+ if(!argv[i]) continue;
+ if(0==strcmp(argv[i], arg)){
+ def = atoi(argv[i+1]);
+ del_arg(argc, argv, i);
+ del_arg(argc, argv, i);
+ break;
+ }
+ }
+ return def;
+}
+
+float find_float_arg(int argc, char **argv, char *arg, float def)
+{
+ int i;
+ for(i = 0; i < argc-1; ++i){
+ if(!argv[i]) continue;
+ if(0==strcmp(argv[i], arg)){
+ def = atof(argv[i+1]);
+ del_arg(argc, argv, i);
+ del_arg(argc, argv, i);
+ break;
+ }
+ }
+ return def;
+}
+
+char *find_char_arg(int argc, char **argv, char *arg, char *def)
+{
+ int i;
+ for(i = 0; i < argc-1; ++i){
+ if(!argv[i]) continue;
+ if(0==strcmp(argv[i], arg)){
+ def = argv[i+1];
+ del_arg(argc, argv, i);
+ del_arg(argc, argv, i);
+ break;
+ }
+ }
+ return def;
+}
+
+
+char *basecfg(char *cfgfile)
+{
+ char *c = cfgfile;
+ char *next;
+ while((next = strchr(c, '/')))
+ {
+ c = next+1;
+ }
+ c = copy_string(c);
+ next = strchr(c, '.');
+ if (next) *next = 0;
+ return c;
+}
int alphanum_to_int(char c)
{
@@ -57,11 +159,11 @@
void top_k(float *a, int n, int k, int *index)
{
int i,j;
- for(j = 0; j < k; ++j) index[j] = 0;
+ for(j = 0; j < k; ++j) index[j] = -1;
for(i = 0; i < n; ++i){
int curr = i;
for(j = 0; j < k; ++j){
- if(a[curr] > a[index[j]]){
+ if((index[j] < 0) || a[curr] > a[index[j]]){
int swap = curr;
curr = index[j];
index[j] = swap;
@@ -129,6 +231,13 @@
s[len-offset] = '\0';
}
+void free_ptrs(void **ptrs, int n)
+{
+ int i;
+ for(i = 0; i < n; ++i) free(ptrs[i]);
+ free(ptrs);
+}
+
char *fgetl(FILE *fp)
{
if(feof(fp)) return 0;
@@ -260,10 +369,10 @@
return variance;
}
-float constrain(float a, float max)
+float constrain(float min, float max, float a)
{
- if(a > abs(max)) return abs(max);
- if(a < -abs(max)) return -abs(max);
+ if (a < min) return min;
+ if (a > max) return max;
return a;
}
--
Gitblit v1.10.0