]> git.mdlowis.com Git - projs/tide.git/commitdiff
move undo/redo log to substructure
authorMichael D. Lowis <mike.lowis@gentex.com>
Thu, 24 Oct 2019 16:01:36 +0000 (12:01 -0400)
committerMichael D. Lowis <mike.lowis@gentex.com>
Thu, 24 Oct 2019 16:01:36 +0000 (12:01 -0400)
inc/edit.h
src/lib/buf.c
src/lib/editlog.c
src/tide.c
tests/lib/buf.c

index 5e41b9e2107a82dd96314985c5012ccc7140a60b..c9529e9d5ff34e943c1732f6d5f4d96f0b71beb9 100644 (file)
@@ -39,12 +39,6 @@ typedef struct {
     char* path;       /* the path to the open file */
     GapBuf contents;  /* underlying sequence data structure */
     EditLog log;      /* underlying log of edit operations */
-
-    int transid; /* id number of the current transaction */
-    Log* undo;   /* undo list */
-    Log* redo;   /* redo list */
-    Log* save;   /* pointer to last save position */
-
     Sel selection;    /* the currently selected text */
 } Buf;
 
index 486f7affde11816a126d4ee3fac8c17058637d90..08b84ff2eae5d39d6dd9d354f230871ea0783bfc 100644 (file)
@@ -109,10 +109,10 @@ void buf_init(Buf* buf)
 
     /* reset the state to defaults */
     gapbuf_init(&buf->contents);
-    buf->status    = NORMAL;
-    buf->undo      = NULL;
-    buf->redo      = NULL;
-    buf->transid   = -1;
+    buf->status = NORMAL;
+    buf->log.undo = NULL;
+    buf->log.redo = NULL;
+    buf->log.transid = -1;
     buf->selection = (Sel){0,0,0};
 
     ensure(buf_valid(buf));
@@ -223,7 +223,7 @@ int buf_save(Buf* buf, char* path)
 
         if (buf->status == NORMAL)
         {
-            buf->save = buf->undo;
+            buf->log.save = buf->log.undo;
         }
     }
     ensure(buf_valid(buf));
index ee2ce382d3218f5751e70cfd7fc27c8b58e0b68e..d570343a8d4b192cfdec039c336a7cb740ebd475 100644 (file)
@@ -7,7 +7,7 @@
 static Log* mklog(Buf* buf, size_t beg, size_t end, char* data, Log* next)
 {
     Log* log = calloc(1, sizeof(Log));
-    log->transid = (buf->transid < 0 ? 0 : buf->transid);
+    log->transid = (buf->log.transid < 0 ? 0 : buf->log.transid);
     log->beg = beg;
     log->end = end;
     log->data = data;
@@ -57,7 +57,7 @@ static void log_swap(Buf* buf, Log** src, Log** dest)
             log_swap(buf, src, dest);
         }
 
-        if (buf->save == buf->undo)
+        if (buf->log.save == buf->log.undo)
         {
             buf->status = NORMAL;
         }
@@ -81,29 +81,29 @@ static void log_clear(Log** list)
 void editlog_seqstart(Buf* buf)
 {
     require(buf != NULL);
-    buf->transid = abs(buf->transid);
+    buf->log.transid = abs(buf->log.transid);
 }
 
 void editlog_seqstop(Buf* buf)
 {
     require(buf != NULL);
-    if (buf->transid > 0)
+    if (buf->log.transid > 0)
     {
-        buf->transid = -(buf->transid + 1);
+        buf->log.transid = -(buf->log.transid + 1);
     }
 }
 
 void editlog_clear(Buf* buf)
 {
     require(buf != NULL);
-    log_clear(&(buf->redo));
-    log_clear(&(buf->undo));
+    log_clear(&(buf->log.redo));
+    log_clear(&(buf->log.undo));
 }
 
 void editlog_lastins(Buf* buf, Sel* p_sel)
 {
     require(buf != NULL);
-    Log* log = buf->undo;
+    Log* log = buf->log.undo;
     if (log)
     {
         Sel sel = { .beg = log->beg, .end = log->end };
@@ -143,24 +143,24 @@ void editlog_lastins(Buf* buf, Sel* p_sel)
 void editlog_undo(Buf* buf)
 {
     require(buf != NULL);
-    log_swap(buf, &(buf->undo), &(buf->redo));
+    log_swap(buf, &(buf->log.undo), &(buf->log.redo));
 }
 
 void editlog_redo(Buf* buf)
 {
     require(buf != NULL);
-    log_swap(buf, &(buf->redo), &(buf->undo));
+    log_swap(buf, &(buf->log.redo), &(buf->log.undo));
 }
 
 void editlog_add(Buf* buf, size_t beg, size_t end, char* data)
 {
-    Log* prev = buf->undo;
-    log_clear(&(buf->redo));
+    Log* prev = buf->log.undo;
+    log_clear(&(buf->log.redo));
 
     /* check if this is new transaction or the first entry */
-    if (!prev || (buf->transid > 0 && buf->transid != prev->transid))
+    if (!prev || (buf->log.transid > 0 && buf->log.transid != prev->transid))
     {
-        buf->undo = mklog(buf, beg, end, data, prev);
+        buf->log.undo = mklog(buf, beg, end, data, prev);
     }
     /* check if this is a sequential insert, just expand the previous one */
     else if (!data && !prev->data && prev->end == beg)
@@ -187,7 +187,7 @@ void editlog_add(Buf* buf, size_t beg, size_t end, char* data)
     /* otherwise, make a fresh delete operation */
     else
     {
-        buf->undo = mklog(buf, beg, end, data, prev);
+        buf->log.undo = mklog(buf, beg, end, data, prev);
     }
 }
 
index b4b05e609aab835f9a5f7c123e5012dd20c549e6..5e3eeeb19e95a9fbf39d1c38ecf543a07195fc80 100644 (file)
@@ -65,10 +65,10 @@ static void dumpdata(FILE* f)
         fprintf(f, "\t\t.bufend:\t%p\n",   (void*)Regions[i].buffer.contents.bufend);
         fprintf(f, "\t\t.gapstart:\t%p\n", (void*)Regions[i].buffer.contents.gapstart);
         fprintf(f, "\t\t.gapend:\t%p\n",   (void*)Regions[i].buffer.contents.gapend);
-        fprintf(f, "\t\t.undo:\t\t%p\n",   (void*)Regions[i].buffer.undo);
-        fprintf(f, "\t\t.redo:\t\t%p\n",   (void*)Regions[i].buffer.redo);
-        fprintf(f, "\t\t.save:\t\t%p\n",   (void*)Regions[i].buffer.save);
-        fprintf(f, "\t\t.transid:\t%d\n",  Regions[i].buffer.transid);
+        fprintf(f, "\t\t.undo:\t\t%p\n",   (void*)Regions[i].buffer.log.undo);
+        fprintf(f, "\t\t.redo:\t\t%p\n",   (void*)Regions[i].buffer.log.redo);
+        fprintf(f, "\t\t.save:\t\t%p\n",   (void*)Regions[i].buffer.log.save);
+        fprintf(f, "\t\t.transid:\t%d\n",  Regions[i].buffer.log.transid);
         fprintf(f, "\t\t.selbeg:\t%zu\n",  Regions[i].buffer.selection.beg);
         fprintf(f, "\t\t.selend:\t%zu\n",  Regions[i].buffer.selection.end);
         fprintf(f, "\t\t.selcol:\t%zu\n",  Regions[i].buffer.selection.col);
index cc822b4d1521383490913e7a34238facfe24484d..bce8927710a8a311f146806859c5fed06b48c0fe 100644 (file)
@@ -143,8 +143,8 @@ TEST_SUITE(BufferTests)
         CHECK(TestBuf.contents.bufend      == TestBuf.contents.bufstart + TestBuf.contents.bufsize);
         CHECK(TestBuf.contents.gapstart    == TestBuf.contents.bufstart);
         CHECK(TestBuf.contents.gapend      == TestBuf.contents.bufend);
-        CHECK(TestBuf.undo        == NULL);
-        CHECK(TestBuf.redo        == NULL);
+        CHECK(TestBuf.log.undo        == NULL);
+        CHECK(TestBuf.log.redo        == NULL);
     }
 
     TEST(buf_init shoud free old buffer and reinitialize)
@@ -158,8 +158,8 @@ TEST_SUITE(BufferTests)
         CHECK(TestBuf.contents.bufend      == TestBuf.contents.bufstart + TestBuf.contents.bufsize);
         CHECK(TestBuf.contents.gapstart    == TestBuf.contents.bufstart);
         CHECK(TestBuf.contents.gapend      == TestBuf.contents.bufend);
-        CHECK(TestBuf.undo        == NULL);
-        CHECK(TestBuf.redo        == NULL);
+        CHECK(TestBuf.log.undo        == NULL);
+        CHECK(TestBuf.log.redo        == NULL);
     }
 
     /* Set Path
@@ -188,8 +188,8 @@ TEST_SUITE(BufferTests)
         buf_load(&TestBuf, "testdocs/lorem.txt");
         CHECK(TestBuf.status      != MODIFIED);
         CHECK(TestBuf.contents.bufsize     == 61440);
-        CHECK(TestBuf.undo        == NULL);
-        CHECK(TestBuf.redo        == NULL);
+        CHECK(TestBuf.log.undo        == NULL);
+        CHECK(TestBuf.log.redo        == NULL);
         CHECK(!strcmp(TestBuf.path, "testdocs/lorem.txt"));
     }
 
@@ -199,8 +199,8 @@ TEST_SUITE(BufferTests)
         buf_load(&TestBuf, "testdocs/waf");
         CHECK(TestBuf.status      != MODIFIED);
         CHECK(TestBuf.contents.bufsize     == 98304);
-        CHECK(TestBuf.undo        == NULL);
-        CHECK(TestBuf.redo        == NULL);
+        CHECK(TestBuf.log.undo        == NULL);
+        CHECK(TestBuf.log.redo        == NULL);
         CHECK(!strcmp(TestBuf.path, "testdocs/waf"));
     }
 
@@ -210,8 +210,8 @@ TEST_SUITE(BufferTests)
         buf_load(&TestBuf, "./testdocs/lorem.txt");
         CHECK(TestBuf.status      != MODIFIED);
         CHECK(TestBuf.contents.bufsize     == 61440);
-        CHECK(TestBuf.undo        == NULL);
-        CHECK(TestBuf.redo        == NULL);
+        CHECK(TestBuf.log.undo        == NULL);
+        CHECK(TestBuf.log.redo        == NULL);
         CHECK(!strcmp(TestBuf.path, "testdocs/lorem.txt"));
     }
 
@@ -224,8 +224,8 @@ TEST_SUITE(BufferTests)
         buf_reload(&TestBuf);
         CHECK(TestBuf.status      != MODIFIED);
         CHECK(TestBuf.contents.bufsize     == 61440);
-        CHECK(TestBuf.undo        == NULL);
-        CHECK(TestBuf.redo        == NULL);
+        CHECK(TestBuf.log.undo        == NULL);
+        CHECK(TestBuf.log.redo        == NULL);
         CHECK(!strcmp(TestBuf.path, "testdocs/lorem.txt"));
     }