diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2025-03-25 14:09:14 +0100 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2025-03-25 14:09:14 +0100 |
| commit | 9154476ba6bf400c1eb379f0a3aa6caae2d06d4d (patch) | |
| tree | 73bfb47ccb6cb31a7c91f9917b37a517f2146c24 /src/solvers/coord/utils.h | |
| parent | cc2dacd43eb7f5ed3a2917612b9a2a9232a61e59 (diff) | |
| download | nissy-core-9154476ba6bf400c1eb379f0a3aa6caae2d06d4d.tar.gz nissy-core-9154476ba6bf400c1eb379f0a3aa6caae2d06d4d.zip | |
Added NISS to coord solver
Diffstat (limited to '')
| -rw-r--r-- | src/solvers/coord/utils.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/solvers/coord/utils.h b/src/solvers/coord/utils.h new file mode 100644 index 0000000..ab4aded --- /dev/null +++ b/src/solvers/coord/utils.h | |||
| @@ -0,0 +1,68 @@ | |||
| 1 | STATIC coord_t *parse_coord(size_t n, const char [n]); | ||
| 2 | STATIC uint8_t parse_axis(size_t n, const char [n]); | ||
| 3 | STATIC void parse_coord_and_axis(size_t n, const char [n], coord_t **, uint8_t *); | ||
| 4 | STATIC int64_t dataid_coord(const char *, char [static NISSY_DATAID_SIZE]); | ||
| 5 | |||
| 6 | STATIC coord_t * | ||
| 7 | parse_coord(size_t n, const char coord[n]) | ||
| 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(size_t n, const char axis[n]) | ||
| 20 | { | ||
| 21 | if (!strncmp(axis, "UD", n) || !strncmp(axis, "DU", n)) { | ||
| 22 | return AXIS_UD; | ||
| 23 | } else if (!strncmp(axis, "RL", n) || !strncmp(axis, "LR", n)) { | ||
| 24 | return AXIS_RL; | ||
| 25 | } else if (!strncmp(axis, "FB", n) || !strncmp(axis, "BF", n)) { | ||
| 26 | return AXIS_FB; | ||
| 27 | } | ||
| 28 | |||
| 29 | return UINT8_ERROR; | ||
| 30 | } | ||
| 31 | |||
| 32 | STATIC void | ||
| 33 | parse_coord_and_axis( | ||
| 34 | size_t n, | ||
| 35 | const char str[n], | ||
| 36 | coord_t **coord, | ||
| 37 | uint8_t *axis | ||
| 38 | ) | ||
| 39 | { | ||
| 40 | size_t i; | ||
| 41 | |||
| 42 | for (i = 0; i < n; i++) | ||
| 43 | if (str[i] == '_') | ||
| 44 | break; | ||
| 45 | |||
| 46 | if (coord != NULL) | ||
| 47 | *coord = parse_coord(i, str); | ||
| 48 | |||
| 49 | if (axis != NULL) | ||
| 50 | *axis = i == n ? UINT8_ERROR : parse_axis(n-i-1, str+i+1); | ||
| 51 | } | ||
| 52 | |||
| 53 | STATIC int64_t | ||
| 54 | dataid_coord(const char *ca, char dataid[static NISSY_DATAID_SIZE]) | ||
| 55 | { | ||
| 56 | coord_t *c; | ||
| 57 | |||
| 58 | parse_coord_and_axis(strlen(ca), ca, &c, NULL); | ||
| 59 | |||
| 60 | if (c == NULL) { | ||
| 61 | LOG("dataid_coord: cannot parse coordinate from '%s'\n", ca); | ||
| 62 | return NISSY_ERROR_INVALID_SOLVER; | ||
| 63 | } | ||
| 64 | |||
| 65 | strcpy(dataid, c->name); | ||
| 66 | |||
| 67 | return NISSY_OK; | ||
| 68 | } | ||
