+double surf_parse_get_time(const char *string) {
+ char* ptr;
+ double res = strtod(string, &ptr);
+ if (ptr == string)
+ surf_parse_error("This is not a time: %s", string);
+ else if (strcmp(ptr, "ps") == 0)
+ res *= 1E-12;
+ else if (strcmp(ptr, "ns") == 0)
+ res *= 1E-9;
+ else if (strcmp(ptr, "us") == 0)
+ res *= 1E-6;
+ else if (strcmp(ptr, "ms") == 0)
+ res *= 1E-3;
+ else if (strcmp(ptr, "s") == 0)
+ res *= 1;
+ else if (strcmp(ptr, "m") == 0)
+ res *= 60;
+ else if (strcmp(ptr, "h") == 0)
+ res *= 3600;
+ else if (strcmp(ptr, "d") == 0)
+ res *= 86400;
+ else if (strcmp(ptr, "w") == 0)
+ res *= 604800;
+ return res;
+}
+
+double surf_parse_get_bandwidth(const char *string) {
+ char* ptr;
+ double res = strtod(string, &ptr);
+ if (ptr == string)
+ surf_parse_error("This is not a bandwidth: %s", string);
+ else if (strcmp(ptr, "KBps") == 0)
+ res *= 1E3;
+ else if (strcmp(ptr, "MBps") == 0)
+ res *= 1E6;
+ else if (strcmp(ptr, "GBps") == 0)
+ res *= 1E9;
+ else if (strcmp(ptr, "TBps") == 0)
+ res *= 1E12;
+ else if (strcmp(ptr, "Bps") == 0)
+ res *= 1;
+ else if (strcmp(ptr, "kbps") == 0)
+ res *= 0.125 * 1E3;
+ else if (strcmp(ptr, "mbps") == 0)
+ res *= 0.125 * 1E6;
+ else if (strcmp(ptr, "gbps") == 0)
+ res *= 0.125 * 1E9;
+ else if (strcmp(ptr, "tbps") == 0)
+ res *= 0.125 * 1E12;
+ else if (strcmp(ptr, "bps") == 0)
+ res *= 0.125;
+ return res;
+}
+
+double surf_parse_get_power(const char *string) {
+ char* ptr;
+ double res = strtod(string, &ptr);
+ if (ptr == string)
+ surf_parse_error("This is not a power: %s", string);
+ else if (strcmp(ptr, "kiloflops") == 0)
+ res *= 1E3;
+ else if (strcmp(ptr, "megaflops") == 0)
+ res *= 1E6;
+ else if (strcmp(ptr, "gigaflops") == 0)
+ res *= 1E9;
+ else if (strcmp(ptr, "teraflops") == 0)
+ res *= 1E12;
+ else if (strcmp(ptr, "petaflops") == 0)
+ res *= 1E15;
+ else if (strcmp(ptr, "exaflops") == 0)
+ res *= 1E18;
+ else if (strcmp(ptr, "zettaflops") == 0)
+ res *= 1E21;
+ else if (strcmp(ptr, "yottaflops") == 0)
+ res *= 1E24;
+ else if (strcmp(ptr, "flops") == 0)
+ res *= 1;
+ else if (strcmp(ptr, "kf") == 0)
+ res *= 1E3;
+ else if (strcmp(ptr, "mf") == 0)
+ res *= 1E6;
+ else if (strcmp(ptr, "gf") == 0)
+ res *= 1E9;
+ else if (strcmp(ptr, "tf") == 0)
+ res *= 1E12;
+ else if (strcmp(ptr, "pf") == 0)
+ res *= 1E15;
+ else if (strcmp(ptr, "ef") == 0)
+ res *= 1E18;
+ else if (strcmp(ptr, "zf") == 0)
+ res *= 1E21;
+ else if (strcmp(ptr, "yf") == 0)
+ res *= 1E24;
+ else if (strcmp(ptr, "f") == 0)
+ res *= 1;
+ return res;
+}