diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2025-08-05 09:04:00 +0200 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2025-08-05 09:04:00 +0200 |
| commit | 3e7bb9b87ef9b47d8f643dbcae19a64ddbc81dbb (patch) | |
| tree | 122faba06273ae0450a2994e22bad42202f11da7 /src/solvers/coord/utils.h | |
| parent | f6efc882a279cddb624fe2f2470797561a6997b8 (diff) | |
| download | nissy-core-3e7bb9b87ef9b47d8f643dbcae19a64ddbc81dbb.tar.gz nissy-core-3e7bb9b87ef9b47d8f643dbcae19a64ddbc81dbb.zip | |
Added DRFIN solver
Diffstat (limited to 'src/solvers/coord/utils.h')
| -rw-r--r-- | src/solvers/coord/utils.h | 53 |
1 files changed, 39 insertions, 14 deletions
diff --git a/src/solvers/coord/utils.h b/src/solvers/coord/utils.h index 93704cc..c8a9338 100644 --- a/src/solvers/coord/utils.h +++ b/src/solvers/coord/utils.h | |||
| @@ -1,19 +1,35 @@ | |||
| 1 | STATIC coord_t *parse_coord(size_t, const char *); | 1 | STATIC coord_t *parse_coord(size_t, const char *); |
| 2 | STATIC void parse_coord_and_trans(const char *, coord_t **, uint8_t *); | 2 | STATIC multicoord_t *parse_multicoord(size_t, const char *); |
| 3 | STATIC void parse_coord_and_trans( | ||
| 4 | const char *, coord_t **, multicoord_t **, uint8_t *); | ||
| 3 | STATIC long long dataid_coord(const char *, char [static NISSY_SIZE_DATAID]); | 5 | STATIC long long dataid_coord(const char *, char [static NISSY_SIZE_DATAID]); |
| 4 | 6 | ||
| 5 | STATIC coord_t * | 7 | STATIC coord_t * |
| 6 | parse_coord(size_t n, const char *coord) | 8 | parse_coord(size_t n, const char *coord) |
| 7 | { | 9 | { |
| 8 | int i; | 10 | int i; |
| 11 | const char *name; | ||
| 9 | 12 | ||
| 10 | /* | 13 | for (i = 0; all_coordinates[i] != NULL; i++) { |
| 11 | TODO Some coordinates are parsed incorrectly, e.g. DRFINNOE | 14 | name = all_coordinates[i]->name; |
| 12 | TODO is matched by DRFIN. Check that strncmp is used correctly. | 15 | if (n == strlen(name) && !strncmp(name, coord, n)) |
| 13 | */ | ||
| 14 | for (i = 0; all_coordinates[i] != NULL; i++) | ||
| 15 | if (!strncmp(all_coordinates[i]->name, coord, n)) | ||
| 16 | return all_coordinates[i]; | 16 | return all_coordinates[i]; |
| 17 | } | ||
| 18 | |||
| 19 | return NULL; | ||
| 20 | } | ||
| 21 | |||
| 22 | STATIC multicoord_t * | ||
| 23 | parse_multicoord(size_t n, const char *coord) | ||
| 24 | { | ||
| 25 | int i; | ||
| 26 | const char *name; | ||
| 27 | |||
| 28 | for (i = 0; all_multicoordinates[i] != NULL; i++) { | ||
| 29 | name = all_multicoordinates[i]->name; | ||
| 30 | if (n == strlen(name) && !strncmp(name, coord, n)) | ||
| 31 | return all_multicoordinates[i]; | ||
| 32 | } | ||
| 17 | 33 | ||
| 18 | return NULL; | 34 | return NULL; |
| 19 | } | 35 | } |
| @@ -22,18 +38,22 @@ STATIC void | |||
| 22 | parse_coord_and_trans( | 38 | parse_coord_and_trans( |
| 23 | const char *str, | 39 | const char *str, |
| 24 | coord_t **coord, | 40 | coord_t **coord, |
| 41 | multicoord_t **mcoord, | ||
| 25 | uint8_t *trans | 42 | uint8_t *trans |
| 26 | ) | 43 | ) |
| 27 | { | 44 | { |
| 28 | size_t i; | 45 | size_t i; |
| 29 | 46 | ||
| 30 | for (i = 6; i < strlen(str); i++) | 47 | for (i = 7; i < strlen(str); i++) |
| 31 | if (str[i] == '_') | 48 | if (str[i] == '_') |
| 32 | break; | 49 | break; |
| 33 | 50 | ||
| 34 | if (coord != NULL) | 51 | if (coord != NULL) |
| 35 | *coord = parse_coord(i-6, str+6); | 52 | *coord = parse_coord(i-6, str+6); |
| 36 | 53 | ||
| 54 | if (mcoord != NULL) | ||
| 55 | *mcoord = parse_multicoord(i-7, str+7); | ||
| 56 | |||
| 37 | if (trans != NULL) | 57 | if (trans != NULL) |
| 38 | *trans = i == strlen(str) ? | 58 | *trans = i == strlen(str) ? |
| 39 | UINT8_ERROR : readrotation(str+i+1); | 59 | UINT8_ERROR : readrotation(str+i+1); |
| @@ -43,15 +63,20 @@ STATIC long long | |||
| 43 | dataid_coord(const char *ca, char dataid[static NISSY_SIZE_DATAID]) | 63 | dataid_coord(const char *ca, char dataid[static NISSY_SIZE_DATAID]) |
| 44 | { | 64 | { |
| 45 | coord_t *c; | 65 | coord_t *c; |
| 66 | multicoord_t *mc; | ||
| 46 | 67 | ||
| 47 | parse_coord_and_trans(ca, &c, NULL); | 68 | parse_coord_and_trans(ca, &c, &mc, NULL); |
| 48 | 69 | ||
| 49 | if (c == NULL) { | 70 | if (c != NULL) { |
| 50 | LOG("Error: cannot parse coordinate from '%s'\n", ca); | 71 | strcpy(dataid, c->name); |
| 51 | return NISSY_ERROR_INVALID_SOLVER; | 72 | return NISSY_OK; |
| 52 | } | 73 | } |
| 53 | 74 | ||
| 54 | strcpy(dataid, c->name); | 75 | if (mc != NULL) { |
| 76 | strcpy(dataid, mc->name); | ||
| 77 | return NISSY_OK; | ||
| 78 | } | ||
| 55 | 79 | ||
| 56 | return NISSY_OK; | 80 | LOG("Error: cannot parse coordinate from '%s'\n", ca); |
| 81 | return NISSY_ERROR_INVALID_SOLVER; | ||
| 57 | } | 82 | } |
