[gnome-builder] buffer: make IdeBufferLineChanges a GFlags



commit 4f81d5ea234d1549d685bd0ebdb14944654fd151
Author: Christian Hergert <chergert redhat com>
Date:   Tue Jan 30 16:36:08 2018 -0800

    buffer: make IdeBufferLineChanges a GFlags
    
    This makes the line changes a GFlags so that we can bitwise-or some of the
    flags together. Additionly, we make the bits match the LineFlags enum so
    that we can do a direct copy of the bits into the compiled flags value.
    
    Fixes #388

 src/libide/buffers/ide-buffer-change-monitor.h  |  6 +++---
 src/libide/buffers/ide-buffer.c                 | 26 ++++++++-----------------
 src/plugins/git/ide-git-buffer-change-monitor.c |  7 +++----
 3 files changed, 14 insertions(+), 25 deletions(-)
---
diff --git a/src/libide/buffers/ide-buffer-change-monitor.h b/src/libide/buffers/ide-buffer-change-monitor.h
index b39d1025a..28f8224a7 100644
--- a/src/libide/buffers/ide-buffer-change-monitor.h
+++ b/src/libide/buffers/ide-buffer-change-monitor.h
@@ -33,9 +33,9 @@ G_DECLARE_DERIVABLE_TYPE (IdeBufferChangeMonitor, ide_buffer_change_monitor, IDE
 typedef enum
 {
   IDE_BUFFER_LINE_CHANGE_NONE    = 0,
-  IDE_BUFFER_LINE_CHANGE_ADDED   = 1,
-  IDE_BUFFER_LINE_CHANGE_CHANGED = 2,
-  IDE_BUFFER_LINE_CHANGE_DELETED = 3,
+  IDE_BUFFER_LINE_CHANGE_ADDED   = 1 << 0,
+  IDE_BUFFER_LINE_CHANGE_CHANGED = 1 << 1,
+  IDE_BUFFER_LINE_CHANGE_DELETED = 1 << 2,
 } IdeBufferLineChange;
 
 struct _IdeBufferChangeMonitorClass
diff --git a/src/libide/buffers/ide-buffer.c b/src/libide/buffers/ide-buffer.c
index 35d1b38cc..fee1d6cd3 100644
--- a/src/libide/buffers/ide-buffer.c
+++ b/src/libide/buffers/ide-buffer.c
@@ -2064,24 +2064,14 @@ ide_buffer_get_line_flags (IdeBuffer *self,
     {
       change = ide_buffer_change_monitor_get_change (priv->change_monitor, line);
 
-      switch (change)
-        {
-        case IDE_BUFFER_LINE_CHANGE_ADDED:
-          flags |= IDE_BUFFER_LINE_FLAGS_ADDED;
-          break;
-
-        case IDE_BUFFER_LINE_CHANGE_CHANGED:
-          flags |= IDE_BUFFER_LINE_FLAGS_CHANGED;
-          break;
-
-        case IDE_BUFFER_LINE_CHANGE_DELETED:
-          flags |= IDE_BUFFER_LINE_FLAGS_DELETED;
-          break;
-
-        case IDE_BUFFER_LINE_CHANGE_NONE:
-        default:
-          break;
-        }
+      {
+        G_STATIC_ASSERT ((int)IDE_BUFFER_LINE_CHANGE_ADDED == (int)IDE_BUFFER_LINE_FLAGS_ADDED);
+        G_STATIC_ASSERT ((int)IDE_BUFFER_LINE_CHANGE_DELETED == (int)IDE_BUFFER_LINE_FLAGS_DELETED);
+        G_STATIC_ASSERT ((int)IDE_BUFFER_LINE_CHANGE_CHANGED == (int)IDE_BUFFER_LINE_FLAGS_CHANGED);
+      }
+
+      /* Change maps to the same bits in our flags */
+      flags |= (change & 0x7);
     }
 
   return flags;
diff --git a/src/plugins/git/ide-git-buffer-change-monitor.c b/src/plugins/git/ide-git-buffer-change-monitor.c
index 698de1a6b..dffe51463 100644
--- a/src/plugins/git/ide-git-buffer-change-monitor.c
+++ b/src/plugins/git/ide-git-buffer-change-monitor.c
@@ -569,7 +569,7 @@ diff_line_cb (GgitDiffDelta *delta,
     case GGIT_DIFF_LINE_ADDITION:
       diff_line = find_or_add_line (info->lines, new_lineno);
       if (diff_line->change != 0)
-        diff_line->change = IDE_BUFFER_LINE_CHANGE_CHANGED;
+        diff_line->change |= IDE_BUFFER_LINE_CHANGE_CHANGED;
       else
         diff_line->change = IDE_BUFFER_LINE_CHANGE_ADDED;
 
@@ -586,9 +586,8 @@ diff_line_cb (GgitDiffDelta *delta,
 
       diff_line = find_or_add_line (info->lines, old_lineno);
       if (diff_line->change != 0)
-        diff_line->change = IDE_BUFFER_LINE_CHANGE_CHANGED;
-      else
-        diff_line->change = IDE_BUFFER_LINE_CHANGE_DELETED;
+        diff_line->change |= IDE_BUFFER_LINE_CHANGE_CHANGED;
+      diff_line->change |= IDE_BUFFER_LINE_CHANGE_DELETED;
 
       info->hunk_del_count++;
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]