diff options
author | Andrés <andmarti@gmail.com> | 2021-04-01 12:11:50 -0300 |
---|---|---|
committer | Andrés <andmarti@gmail.com> | 2021-04-01 12:11:50 -0300 |
commit | d78163dd78174870ca53da8670ad6029e2f60122 (patch) | |
tree | 0e0222fa5af6a0165450a6a33e86b7334cc86f3f | |
parent | f3377613551ba0232c31c4a80827773a361b586d (diff) |
Improve sort for +65k rows
-rw-r--r-- | src/sort.c | 18 |
1 files changed, 9 insertions, 9 deletions
@@ -157,24 +157,24 @@ void sortrange(struct ent * left, struct ent * right, char * criteria) { yank_area(minr, minc, maxr, maxc, 's', 1); // save yanklist in the original range + // Fix the 'ent' elements in the sorted range - int i, d, move; struct ent * p_aux, * yl = get_yanklist(); - // Traverse 'rows' structure - for (d = 0; d < (maxr - minr + 1); d++) { - for (i = 0; i < (maxc - minc + 1); i++) { - p_aux = yl; - move = ( rows[d] - minr) * (maxc - minc + 1) + i; - while (move--) p_aux = p_aux->next; - p_aux->row = minr + d; + for (c = 0, p_aux = yl; p_aux; p_aux = p_aux->next) { + if (rows[c] != p_aux->row) { + for (c = 0; c <= maxr - minr && rows[c] != p_aux->row; c++) ; + if (c > maxr - minr) { + sc_error("sort error"); + return; + } } + p->row = minr + c; } currow = minr; curcol = minc; - //paste_yanked_ents(0, 'a'); // paste ents over currow and curcol paste_yanked_ents(0, 's'); // paste ents over currow and curcol scxfree((char *) sort); |