From 09062c839b561249730ebb2b67cdf47f36f4c542 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Manuel=20Tom=C3=A1s?= Date: Mon, 20 Apr 2020 02:51:10 -0300 Subject: Rework gap movement --- page.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) (limited to 'page.c') diff --git a/page.c b/page.c index ee4861c..a0e2577 100644 --- a/page.c +++ b/page.c @@ -83,19 +83,24 @@ void free_page(struct page **page) { free(tmp); } -void move_gap(struct page *page, int target) { - while(target) { - if (target > 0) { - page->buffer[page->gap_start] = page->buffer[page->gap_end]; - page->gap_start++; - page->gap_end++; - target--; - } else { - page->gap_end--; - page->gap_start--; - page->buffer[page->gap_end] = page->buffer[page->gap_start]; - target++; - } +void move_gap_forward(struct page *page) { + page->buffer[page->gap_start] = page->buffer[page->gap_end]; + page->gap_start++; + page->gap_end++; +} + +void move_gap_backward(struct page *page) { + page->gap_end--; + page->gap_start--; + page->buffer[page->gap_end] = page->buffer[page->gap_start]; +} + +void move_gap(struct page *page, uint16_t offset) { + while (page->gap_start < offset) { + move_gap_forward(page); + } + while (page->gap_start > offset) { + move_gap_backward(page); } } @@ -107,7 +112,7 @@ void insert_into_page(struct page *page, uint8_t c) { } void delete_from_page(struct page *page) { - if (page->gap_start != page->buffer) { + if (page->gap_start != 0) { page->gap_start--; } } -- cgit v1.2.3