[gnome-builder/wip/chergert/snippets-viewer: 2/4] snippets: add count helper to IdeSourceSnippets



commit 59c16100dd152e6593381ea82172e00f5ed286f0
Author: Christian Hergert <christian hergert me>
Date:   Fri Aug 21 21:56:04 2015 -0700

    snippets: add count helper to IdeSourceSnippets
    
    Convenience helper to get the number of snippets.

 libide/ide-source-snippets.c |   37 +++++++++++++++++++++++++++++++++----
 libide/ide-source-snippets.h |   26 +++++++++++++-------------
 2 files changed, 46 insertions(+), 17 deletions(-)
---
diff --git a/libide/ide-source-snippets.c b/libide/ide-source-snippets.c
index dd4ffc4..a8235b4 100644
--- a/libide/ide-source-snippets.c
+++ b/libide/ide-source-snippets.c
@@ -99,11 +99,11 @@ ide_source_snippets_add (IdeSourceSnippets *snippets,
   trie_insert (snippets->snippets, trigger, g_object_ref (snippet));
 }
 
-gboolean
+static gboolean
 ide_source_snippets_foreach_cb (Trie        *trie,
-                               const gchar *key,
-                               gpointer     value,
-                               gpointer     user_data)
+                                const gchar *key,
+                                gpointer     value,
+                                gpointer     user_data)
 {
   gpointer *closure = user_data;
 
@@ -164,3 +164,32 @@ ide_source_snippets_init (IdeSourceSnippets *snippets)
 {
   snippets->snippets = trie_new (g_object_unref);
 }
+
+static gboolean
+increment_count (Trie        *trie,
+                 const gchar *key,
+                 gpointer     value,
+                 gpointer     user_data)
+{
+  guint *count = user_data;
+  (*count)++;
+  return FALSE;
+}
+
+guint
+ide_source_snippets_count (IdeSourceSnippets *self)
+{
+  guint count = 0;
+
+  g_return_val_if_fail (IDE_IS_SOURCE_SNIPPETS (self), 0);
+
+  trie_traverse (self->snippets,
+                 "",
+                 G_PRE_ORDER,
+                 G_TRAVERSE_LEAVES,
+                 -1,
+                 increment_count,
+                 &count);
+
+  return count;
+}
diff --git a/libide/ide-source-snippets.h b/libide/ide-source-snippets.h
index 008b4f7..c72f171 100644
--- a/libide/ide-source-snippets.h
+++ b/libide/ide-source-snippets.h
@@ -27,19 +27,19 @@ G_BEGIN_DECLS
 
 #define IDE_TYPE_SOURCE_SNIPPETS (ide_source_snippets_get_type())
 
-G_DECLARE_FINAL_TYPE (IdeSourceSnippets, ide_source_snippets,
-                      IDE, SOURCE_SNIPPETS, GObject)
-
-void              ide_source_snippets_add            (IdeSourceSnippets *snippets,
-                                                     IdeSourceSnippet  *snippet);
-void              ide_source_snippets_clear          (IdeSourceSnippets *snippets);
-void              ide_source_snippets_merge          (IdeSourceSnippets *snippets,
-                                                     IdeSourceSnippets *other);
-IdeSourceSnippets *ide_source_snippets_new            (void);
-void              ide_source_snippets_foreach        (IdeSourceSnippets *snippets,
-                                                     const gchar      *prefix,
-                                                     GFunc             foreach_func,
-                                                     gpointer          user_data);
+G_DECLARE_FINAL_TYPE (IdeSourceSnippets, ide_source_snippets, IDE, SOURCE_SNIPPETS, GObject)
+
+void               ide_source_snippets_add     (IdeSourceSnippets *snippets,
+                                                IdeSourceSnippet  *snippet);
+void               ide_source_snippets_clear   (IdeSourceSnippets *snippets);
+void               ide_source_snippets_merge   (IdeSourceSnippets *snippets,
+                                                IdeSourceSnippets *other);
+guint              ide_source_snippets_count   (IdeSourceSnippets *self);
+IdeSourceSnippets *ide_source_snippets_new     (void);
+void               ide_source_snippets_foreach (IdeSourceSnippets *snippets,
+                                                const gchar       *prefix,
+                                                GFunc              foreach_func,
+                                                gpointer           user_data);
 
 G_END_DECLS
 


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