-double surf_parse_get_power(const char *string) {
- size_t len = strlen(string);
- char* tmp = xbt_malloc(sizeof(char) * (len + 1));
- strcpy(tmp, string);
- if (!strcmp(tmp + len - 9, "kiloflops")) {
- tmp[len-9] = 0;
- return surf_parse_get_double(tmp) * 1E3;
- }
- if (!strcmp(tmp + len - 9, "megaflops")) {
- tmp[len-9] = 0;
- return surf_parse_get_double(tmp) * 1E6;
- }
- if (!strcmp(tmp + len - 9, "gigaflops")) {
- tmp[len-9] = 0;
- return surf_parse_get_double(tmp) * 1E9;
- }
- if (!strcmp(tmp + len - 9, "teraflops")) {
- tmp[len-9] = 0;
- return surf_parse_get_double(tmp) * 1E12;
- }
- if (!strcmp(tmp + len - 9, "petaflops")) {
- tmp[len-9] = 0;
- return surf_parse_get_double(tmp) * 1E15;
- }
- if (!strcmp(tmp + len - 9, "exaflops")) {
- tmp[len-9] = 0;
- return surf_parse_get_double(tmp) * 1E18;
- }
- if (!strcmp(tmp + len - 9, "zettaflops")) {
- tmp[len-9] = 0;
- return surf_parse_get_double(tmp) * 1E21;
- }
- if (!strcmp(tmp + len - 9, "yottaflops")) {
- tmp[len-9] = 0;
- return surf_parse_get_double(tmp) * 1E24;
- }
- if (!strcmp(tmp + len - 5, "flops")) {
- tmp[len-5] = 0;
- return surf_parse_get_double(tmp);
- }
- if (!strcmp(tmp + len - 2, "kf")) {
- tmp[len-2] = 0;
- return surf_parse_get_double(tmp) * 1E3;
- }
- if (!strcmp(tmp + len - 2, "mf")) {
- tmp[len-2] = 0;
- return surf_parse_get_double(tmp) * 1E6;
- }
- if (!strcmp(tmp + len - 2, "gf")) {
- tmp[len-2] = 0;
- return surf_parse_get_double(tmp) * 1E9;
- }
- if (!strcmp(tmp + len - 2, "tf")) {
- tmp[len-2] = 0;
- return surf_parse_get_double(tmp) * 1E12;
- }
- if (!strcmp(tmp + len - 2, "pf")) {
- tmp[len-2] = 0;
- return surf_parse_get_double(tmp) * 1E15;
- }
- if (!strcmp(tmp + len - 2, "ef")) {
- tmp[len-2] = 0;
- return surf_parse_get_double(tmp) * 1E18;
- }
- if (!strcmp(tmp + len - 2, "zf")) {
- tmp[len-2] = 0;
- return surf_parse_get_double(tmp) * 1E21;
- }
- if (!strcmp(tmp + len - 2, "yf")) {
- tmp[len-2] = 0;
- return surf_parse_get_double(tmp) * 1E24;
- }
- if (!strcmp(tmp + len - 1, "f")) {
- tmp[len-1] = 0;
- return surf_parse_get_double(tmp);
- }
- return surf_parse_get_double(tmp);
+double surf_parse_get_bandwidth(const char *string)
+{
+ const struct unit_scale units[] = {
+ { "TBps", 1e12 },
+ { "GBps", 1e9 },
+ { "MBps", 1e6 },
+ { "KBps", 1e3 },
+ { "Bps", 1.0 },
+ { "", 1.0 }, /* default unit is bytes ber second */
+ { "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);