nissy-core

The "engine" of nissy, including the H48 optimal solver.
git clone https://git.tronto.net/nissy-core
Download | Log | Files | Refs | README | LICENSE

utils.h (1383B)


      1 STATIC coord_t *parse_coord(size_t, const char *);
      2 STATIC uint8_t parse_axis(const char [static 2]);
      3 STATIC void parse_coord_and_axis(const char *, coord_t **, uint8_t *);
      4 STATIC long long dataid_coord(const char *, char [static NISSY_SIZE_DATAID]);
      5 
      6 STATIC coord_t *
      7 parse_coord(size_t n, const char *coord)
      8 {
      9 	int i;
     10 
     11 	for (i = 0; all_coordinates[i] != NULL; i++)
     12 		if (!strncmp(all_coordinates[i]->name, coord, n))
     13 			return all_coordinates[i];
     14 
     15 	return NULL;
     16 }
     17 
     18 STATIC uint8_t
     19 parse_axis(const char axis[static 2])
     20 {
     21 	if (!strcmp(axis, "UD") || !strcmp(axis, "DU")) {
     22 		return AXIS_UD;
     23 	} else if (!strcmp(axis, "RL") || !strcmp(axis, "LR")) {
     24 		return AXIS_RL;
     25 	} else if (!strcmp(axis, "FB") || !strcmp(axis, "BF")) {
     26 		return AXIS_FB;
     27 	}
     28 
     29 	return UINT8_ERROR;
     30 }
     31 
     32 STATIC void
     33 parse_coord_and_axis(
     34 	const char *str,
     35 	coord_t **coord,
     36 	uint8_t *axis
     37 )
     38 {
     39 	size_t i;
     40 
     41 	for (i = 6; i < strlen(str); i++)
     42 		if (str[i] == '_')
     43 			break;
     44 
     45 	if (coord != NULL)
     46 		*coord = parse_coord(i-6, str+6);
     47 
     48 	if (axis != NULL)
     49 		*axis = i == strlen(str) ? UINT8_ERROR : parse_axis(str+i+1);
     50 }
     51 
     52 STATIC long long
     53 dataid_coord(const char *ca, char dataid[static NISSY_SIZE_DATAID])
     54 {
     55 	coord_t *c;
     56 
     57 	parse_coord_and_axis(ca, &c, NULL);
     58 
     59 	if (c == NULL) {
     60 		LOG("Error: cannot parse coordinate from '%s'\n", ca);
     61 		return NISSY_ERROR_INVALID_SOLVER;
     62 	}
     63 
     64 	strcpy(dataid, c->name);
     65 
     66 	return NISSY_OK;
     67 }