+double surf_parse_get_time(const char *string)
+{
+ const struct unit_scale units[] = {
+ { "w", 7 * 24 * 60 * 60 },
+ { "d", 24 * 60 * 60 },
+ { "h", 60 * 60 },
+ { "m", 60 },
+ { "s", 1.0 },
+ { "", 1.0 }, /* default unit is seconds */
+ { "ms", 1e-3 },
+ { "us", 1e-6 },
+ { "ns", 1e-9 },
+ { "ps", 1e-12 },
+ { NULL, 0 }
+ };
+ return surf_parse_get_value_with_unit(string, units);
+}
+
+double surf_parse_get_size(const char *string)
+{
+ const struct unit_scale units[] = {
+ { "TiB", pow(1024, 4) },
+ { "GiB", pow(1024, 3) },
+ { "MiB", pow(1024, 2) },
+ { "KiB", 1024 },
+ { "TB", 1e12 },
+ { "GB", 1e9 },
+ { "MB", 1e6 },
+ { "kB", 1e3 },
+ { "B", 1.0 },
+ { "", 1.0 }, /* default unit is bytes*/
+ { "Tib", 0.125 * pow(1024, 4) },
+ { "Gib", 0.125 * pow(1024, 3) },
+ { "Mib", 0.125 * pow(1024, 2) },
+ { "Kib", 0.125 * 1024 },
+ { "Tb", 0.125 * 1e12 },
+ { "Gb", 0.125 * 1e9 },
+ { "Mb", 0.125 * 1e6 },
+ { "kb", 0.125 * 1e3 },
+ { "b", 0.125 },
+ { NULL, 0 }
+ };
+ return surf_parse_get_value_with_unit(string, units);
+}
+
+double surf_parse_get_bandwidth(const char *string)
+{
+ const struct unit_scale units[] = {
+ { "TiBps", pow(1024, 4) },
+ { "GiBps", pow(1024, 3) },
+ { "MiBps", pow(1024, 2) },
+ { "KiBps", 1024 },
+ { "TBps", 1e12 },
+ { "GBps", 1e9 },
+ { "MBps", 1e6 },
+ { "kBps", 1e3 },
+ { "Bps", 1.0 },
+ { "", 1.0 }, /* default unit is bytes per second */
+ { "Tibps", 0.125 * pow(1024, 4) },
+ { "Gibps", 0.125 * pow(1024, 3) },
+ { "Mibps", 0.125 * pow(1024, 2) },
+ { "Kibps", 0.125 * 1024 },
+ { "Tbps", 0.125 * 1e12 },
+ { "Gbps", 0.125 * 1e9 },
+ { "Mbps", 0.125 * 1e6 },
+ { "kbps", 0.125 * 1e3 },
+ { "bps", 0.125 },
+ { NULL, 0 }
+ };
+ return surf_parse_get_value_with_unit(string, units);
+}
+
+double surf_parse_get_power(const char *string)
+{
+ const struct unit_scale units[] = {
+ { "yottaflops", 1e24 },
+ { "Yf", 1e24 },
+ { "zettaflops", 1e21 },
+ { "Zf", 1e21 },
+ { "exaflops", 1e18 },
+ { "Ef", 1e18 },
+ { "petaflops", 1e15 },
+ { "Pf", 1e15 },
+ { "teraflops", 1e12 },
+ { "Tf", 1e12 },
+ { "gigaflops", 1e9 },
+ { "Gf", 1e9 },
+ { "megaflops", 1e6 },
+ { "Mf", 1e6 },
+ { "kiloflops", 1e3 },
+ { "kf", 1e3 },
+ { "flops", 1.0 },
+ { "f", 1.0 },
+ { "", 1.0 }, /* default unit is flops */
+ { NULL, 0 }
+ };
+ return surf_parse_get_value_with_unit(string, units);
+}