diff options
Diffstat (limited to 'src/steps.c')
| -rw-r--r-- | src/steps.c | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/src/steps.c b/src/steps.c index 34ddcc2..6478bc2 100644 --- a/src/steps.c +++ b/src/steps.c | |||
| @@ -979,29 +979,42 @@ static int | |||
| 979 | estimate_optimal_HTM(CubeTarget ct) | 979 | estimate_optimal_HTM(CubeTarget ct) |
| 980 | { | 980 | { |
| 981 | int dr1, dr2, dr3, cor, ret; | 981 | int dr1, dr2, dr3, cor, ret; |
| 982 | Cube cube = ct.cube; | 982 | Cube inv; |
| 983 | 983 | ||
| 984 | dr1 = ptableval(&pd_khuge_HTM, cube); | 984 | dr1 = ptableval(&pd_khuge_HTM, ct.cube); |
| 985 | cor = estimate_corners_HTM(ct); | 985 | cor = estimate_corners_HTM(ct); |
| 986 | ret = MAX(dr1, cor); | 986 | ret = MAX(dr1, cor); |
| 987 | |||
| 988 | if (ret > ct.target) | 987 | if (ret > ct.target) |
| 989 | return ret; | 988 | return ret; |
| 990 | 989 | ||
| 991 | cube = apply_trans(rf, ct.cube); | 990 | dr2 = ptableval(&pd_khuge_HTM, apply_trans(rf, ct.cube)); |
| 992 | dr2 = ptableval(&pd_khuge_HTM, cube); | ||
| 993 | ret = MAX(ret, dr2); | 991 | ret = MAX(ret, dr2); |
| 994 | |||
| 995 | if (ret > ct.target) | 992 | if (ret > ct.target) |
| 996 | return ret; | 993 | return ret; |
| 997 | 994 | ||
| 998 | cube = apply_trans(fd, ct.cube); | 995 | dr3 = ptableval(&pd_khuge_HTM, apply_trans(fd, ct.cube)); |
| 999 | dr3 = ptableval(&pd_khuge_HTM, cube); | ||
| 1000 | |||
| 1001 | /* Michiel de Bondt's trick */ | ||
| 1002 | if (dr1 == dr2 && dr2 == dr3 && dr1 != 0) | 996 | if (dr1 == dr2 && dr2 == dr3 && dr1 != 0) |
| 1003 | dr3++; | 997 | dr3++; |
| 998 | ret = MAX(ret, dr3); | ||
| 999 | if (ret > ct.target || ret == 0) | ||
| 1000 | return ret; | ||
| 1004 | 1001 | ||
| 1002 | /* Inverse cube probing */ | ||
| 1003 | |||
| 1004 | inv = inverse_cube(ct.cube); | ||
| 1005 | dr1 = ptableval(&pd_khuge_HTM, inv); | ||
| 1006 | ret = MAX(ret, dr1); | ||
| 1007 | if (ret > ct.target) | ||
| 1008 | return ret; | ||
| 1009 | |||
| 1010 | dr2 = ptableval(&pd_khuge_HTM, apply_trans(rf, inv)); | ||
| 1011 | ret = MAX(ret, dr2); | ||
| 1012 | if (ret > ct.target) | ||
| 1013 | return ret; | ||
| 1014 | |||
| 1015 | dr3 = ptableval(&pd_khuge_HTM, apply_trans(fd, inv)); | ||
| 1016 | if (dr1 == dr2 && dr2 == dr3 && dr1 != 0) | ||
| 1017 | dr3++; | ||
| 1005 | return MAX(ret, dr3); | 1018 | return MAX(ret, dr3); |
| 1006 | } | 1019 | } |
| 1007 | 1020 | ||
