aboutsummaryrefslogtreecommitdiff
path: root/src/nissy.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/nissy.c73
1 files changed, 33 insertions, 40 deletions
diff --git a/src/nissy.c b/src/nissy.c
index bc608de..d725599 100644
--- a/src/nissy.c
+++ b/src/nissy.c
@@ -5,15 +5,14 @@
5#include <stdbool.h> 5#include <stdbool.h>
6#include <string.h> 6#include <string.h>
7 7
8#include "nissy.h"
8#include "utils/utils.h" 9#include "utils/utils.h"
9#include "arch/arch.h" 10#include "arch/arch.h"
10#include "core/core.h" 11#include "core/core.h"
11#include "solvers/solvers.h" 12#include "solvers/solvers.h"
12 13
13#include "nissy.h"
14
15int parse_h48_solver(const char *, uint8_t [static 1], uint8_t [static 1]); 14int parse_h48_solver(const char *, uint8_t [static 1], uint8_t [static 1]);
16STATIC int64_t write_result(cube_t, char [static 22]); 15STATIC int64_t write_result(cube_t, char [static NISSY_SIZE_B32]);
17STATIC bool distribution_equal(const uint64_t [static INFO_DISTRIBUTION_LEN], 16STATIC bool distribution_equal(const uint64_t [static INFO_DISTRIBUTION_LEN],
18 const uint64_t [static INFO_DISTRIBUTION_LEN], uint8_t); 17 const uint64_t [static INFO_DISTRIBUTION_LEN], uint8_t);
19STATIC bool checkdata(const char *, const tableinfo_t *); 18STATIC bool checkdata(const char *, const tableinfo_t *);
@@ -107,9 +106,9 @@ distribution_equal(
107} 106}
108 107
109STATIC int64_t 108STATIC int64_t
110write_result(cube_t cube, char result[static 22]) 109write_result(cube_t cube, char result[static NISSY_SIZE_B32])
111{ 110{
112 writecube("B32", cube, result); 111 writecube("B32", cube, NISSY_SIZE_B32, result);
113 112
114 if (!issolvable(cube)) { 113 if (!issolvable(cube)) {
115 LOG("Warning: resulting cube is not solvable\n"); 114 LOG("Warning: resulting cube is not solvable\n");
@@ -121,9 +120,9 @@ write_result(cube_t cube, char result[static 22])
121 120
122int64_t 121int64_t
123nissy_compose( 122nissy_compose(
124 const char cube[static 22], 123 const char cube[static NISSY_SIZE_B32],
125 const char permutation[static 22], 124 const char permutation[static NISSY_SIZE_B32],
126 char result[static 22] 125 char result[static NISSY_SIZE_B32]
127) 126)
128{ 127{
129 cube_t c, p, res; 128 cube_t c, p, res;
@@ -156,14 +155,14 @@ nissy_compose(
156 return write_result(res, result); 155 return write_result(res, result);
157 156
158nissy_compose_error: 157nissy_compose_error:
159 writecube("B32", ZERO_CUBE, result); 158 writecube("B32", ZERO_CUBE, NISSY_SIZE_B32, result);
160 return err; 159 return err;
161} 160}
162 161
163int64_t 162int64_t
164nissy_inverse( 163nissy_inverse(
165 const char cube[static 22], 164 const char cube[static NISSY_SIZE_B32],
166 char result[static 22] 165 char result[static NISSY_SIZE_B32]
167) 166)
168{ 167{
169 cube_t c, res; 168 cube_t c, res;
@@ -188,15 +187,15 @@ nissy_inverse(
188 return write_result(res, result); 187 return write_result(res, result);
189 188
190nissy_inverse_error: 189nissy_inverse_error:
191 writecube("B32", ZERO_CUBE, result); 190 writecube("B32", ZERO_CUBE, NISSY_SIZE_B32, result);
192 return err; 191 return err;
193} 192}
194 193
195int64_t 194int64_t
196nissy_applymoves( 195nissy_applymoves(
197 const char cube[static 22], 196 const char cube[static NISSY_SIZE_B32],
198 const char *moves, 197 const char *moves,
199 char result[static 22] 198 char result[static NISSY_SIZE_B32]
200) 199)
201{ 200{
202 cube_t c, res; 201 cube_t c, res;
@@ -227,15 +226,15 @@ nissy_applymoves(
227 return write_result(res, result); 226 return write_result(res, result);
228 227
229nissy_applymoves_error: 228nissy_applymoves_error:
230 writecube("B32", ZERO_CUBE, result); 229 writecube("B32", ZERO_CUBE, NISSY_SIZE_B32, result);
231 return err; 230 return err;
232} 231}
233 232
234int64_t 233int64_t
235nissy_applytrans( 234nissy_applytrans(
236 const char cube[static 22], 235 const char cube[static NISSY_SIZE_B32],
237 const char transformation[static 12], 236 const char transformation[static NISSY_SIZE_TRANSFORMATION],
238 char result[static 22] 237 char result[static NISSY_SIZE_B32]
239) 238)
240{ 239{
241 cube_t c, res; 240 cube_t c, res;
@@ -260,14 +259,14 @@ nissy_applytrans(
260 return write_result(res, result); 259 return write_result(res, result);
261 260
262nissy_applytrans_error: 261nissy_applytrans_error:
263 writecube("B32", ZERO_CUBE, result); 262 writecube("B32", ZERO_CUBE, NISSY_SIZE_B32, result);
264 return err; 263 return err;
265} 264}
266 265
267int64_t 266int64_t
268nissy_frommoves( 267nissy_frommoves(
269 const char *moves, 268 const char *moves,
270 char result[static 22] 269 char result[static NISSY_SIZE_B32]
271) 270)
272{ 271{
273 cube_t res; 272 cube_t res;
@@ -290,7 +289,7 @@ nissy_frommoves(
290 return write_result(res, result); 289 return write_result(res, result);
291 290
292nissy_frommoves_error: 291nissy_frommoves_error:
293 writecube("B32", ZERO_CUBE, result); 292 writecube("B32", ZERO_CUBE, NISSY_SIZE_B32, result);
294 return err; 293 return err;
295} 294}
296 295
@@ -304,7 +303,6 @@ nissy_convert(
304) 303)
305{ 304{
306 cube_t c; 305 cube_t c;
307 int ret;
308 int64_t err; 306 int64_t err;
309 307
310 if (format_in == NULL) { 308 if (format_in == NULL) {
@@ -327,28 +325,15 @@ nissy_convert(
327 325
328 c = readcube(format_in, cube_string); 326 c = readcube(format_in, cube_string);
329 327
330 if (iserror(c)) {
331 err = NISSY_ERROR_INVALID_CUBE;
332 goto nissy_convert_error;
333 }
334
335 ret = writecube(format_out, c, result);
336
337 if (ret != 0) {
338 /* Assume the format was invalid */
339 err = NISSY_ERROR_INVALID_FORMAT;
340 goto nissy_convert_error;
341 }
342
343 if (!isconsistent(c)) { 328 if (!isconsistent(c)) {
344 err = NISSY_ERROR_UNKNOWN; 329 err = NISSY_ERROR_INVALID_CUBE;
345 goto nissy_convert_error; 330 goto nissy_convert_error;
346 } 331 }
347 332
348 return NISSY_OK; 333 return writecube(format_out, c, result_size, result);
349 334
350nissy_convert_error: 335nissy_convert_error:
351 /* We don't write anything to result, we don't know the format */ 336 result[0] = '\0';
352 return err; 337 return err;
353} 338}
354 339
@@ -359,7 +344,7 @@ nissy_getcube(
359 int64_t cp, 344 int64_t cp,
360 int64_t co, 345 int64_t co,
361 const char *options, 346 const char *options,
362 char result[static 22] 347 char result[static NISSY_SIZE_B32]
363) 348)
364{ 349{
365 int i; 350 int i;
@@ -498,7 +483,7 @@ nissy_checkdata(
498 483
499int64_t 484int64_t
500nissy_solve( 485nissy_solve(
501 const char cube[static 22], 486 const char cube[static NISSY_SIZE_B32],
502 const char *solver, 487 const char *solver,
503 uint8_t nissflag, 488 uint8_t nissflag,
504 int8_t minmoves, 489 int8_t minmoves,
@@ -671,6 +656,14 @@ nissy_explainerror(
671 "is NULL.\n", NISSY_ERROR_NULL_POINTER 656 "is NULL.\n", NISSY_ERROR_NULL_POINTER
672 ); 657 );
673 return NISSY_OK; 658 return NISSY_OK;
659 case NISSY_ERROR_BUFFER_SIZE:
660 write(
661 "The value %" PRId64 " means that one of the buffers "
662 "provided is too small. For example, it could be too "
663 "small to hold the result or too small to hold the data "
664 "generated by gendata.\n", NISSY_ERROR_BUFFER_SIZE
665 );
666 return NISSY_OK;
674 case NISSY_ERROR_DATA: 667 case NISSY_ERROR_DATA:
675 write( 668 write(
676 "The value %" PRId64 " means that the provided data is " 669 "The value %" PRId64 " means that the provided data is "

Generated with cgit - Back to sebastiano.tronto.net