# TODO-list for version 2.1 (or is it 3.0 at this point?) ## Rework solver ### Architecture * Nail down the theory first * One generic solve module that does not depend on anything else, not even on cube if possible * The generic file includes the logic for branching and calls functions provided as parameters to move the cube and check the status etc... * This includes the logic for single/multithreading (simplify if compiled with N_THREADS = 1 or whatever this option is going to be) * The data representing the cube is a void pointer * Move two-step solve to a different module * Each other solver (solve coord, solve fst, solve multistep) should go in a separate module ### Other practicalities * remove cube from dfsarg? (i still need to save the scramble somewhere, but I really only use it in dfs_niss) * Re-work prepare_step process for solve_generic (nxopt table is special). * is_valid should also unnis and / or cleanup the alg. ## New optimal solver (use fst) * Implement nxopt31 with fst_cube. Remember that the function move_check_solved() should do one axis at the time, so that we don't move everything before checking. ## Simplify steps * Remove one type of rotation. * Change steps to choicestep and stepalt to step (or was this already done?). ## Add missing coordinates and steps * Check the old file for a list. Many are missing. * Checkers in steps.c should use coordinates. ## Missing and new commands * gen * freemem * twophase ## Easy improvements * Solve should re-orient the cube if centers are off * Solve: add options for -I (inverse only) and -L (linear = normal + inverse).