[gtk/ebassi/issue-4543] Add a boxed GType for GtkBitsetIter




commit 3f7122b3d2ebb8fc22cbe4ede16e57814bd6b499
Author: Emmanuele Bassi <ebassi gnome org>
Date:   Tue Dec 14 15:51:13 2021 +0000

    Add a boxed GType for GtkBitsetIter
    
    This way language bindings have a chance at managing the memory of
    GtkBitset iterators.
    
    Fixes: #4543

 gtk/gtkbitset.c | 26 ++++++++++++++++++++++----
 gtk/gtkbitset.h |  5 +++--
 2 files changed, 25 insertions(+), 6 deletions(-)
---
diff --git a/gtk/gtkbitset.c b/gtk/gtkbitset.c
index 2b98b740f3..ef5e835656 100644
--- a/gtk/gtkbitset.c
+++ b/gtk/gtkbitset.c
@@ -546,7 +546,7 @@ gtk_bitset_union (GtkBitset       *self,
 {
   g_return_if_fail (self != NULL);
   g_return_if_fail (other != NULL);
-  
+
   if (self == other)
     return;
 
@@ -571,7 +571,7 @@ gtk_bitset_intersect (GtkBitset       *self,
 {
   g_return_if_fail (self != NULL);
   g_return_if_fail (other != NULL);
-  
+
   if (self == other)
     return;
 
@@ -596,7 +596,7 @@ gtk_bitset_subtract (GtkBitset       *self,
 {
   g_return_if_fail (self != NULL);
   g_return_if_fail (other != NULL);
-  
+
   if (self == other)
     {
       roaring_bitmap_clear (&self->roaring);
@@ -626,7 +626,7 @@ gtk_bitset_difference (GtkBitset       *self,
 {
   g_return_if_fail (self != NULL);
   g_return_if_fail (other != NULL);
-  
+
   if (self == other)
     {
       roaring_bitmap_clear (&self->roaring);
@@ -756,6 +756,24 @@ gtk_bitset_splice (GtkBitset *self,
 
 G_STATIC_ASSERT (sizeof (GtkBitsetIter) >= sizeof (roaring_uint32_iterator_t));
 
+static GtkBitsetIter *
+gtk_bitset_iter_copy (GtkBitsetIter *iter)
+{
+  roaring_uint32_iterator_t *riter = (roaring_uint32_iterator_t *) iter;
+
+  return (GtkBitsetIter *) roaring_copy_uint32_iterator (riter);
+}
+
+static void
+gtk_bitset_iter_free (GtkBitsetIter *iter)
+{
+  roaring_uint32_iterator_t *riter = (roaring_uint32_iterator_t *) iter;
+
+  roaring_free_uint32_iterator (riter);
+}
+
+G_DEFINE_BOXED_TYPE (GtkBitsetIter, gtk_bitset_iter, gtk_bitset_iter_copy, gtk_bitset_iter_free)
+
 /**
  * gtk_bitset_iter_init_first:
  * @iter: (out): a pointer to an uninitialized `GtkBitsetIter`
diff --git a/gtk/gtkbitset.h b/gtk/gtkbitset.h
index d85626b20e..9ec5d15bc2 100644
--- a/gtk/gtkbitset.h
+++ b/gtk/gtkbitset.h
@@ -148,6 +148,9 @@ struct _GtkBitsetIter
   gpointer private_data[10];
 };
 
+GDK_AVAILABLE_IN_4_6
+GType                   gtk_bitset_iter_get_type                (void) G_GNUC_CONST;
+
 GDK_AVAILABLE_IN_ALL
 gboolean                gtk_bitset_iter_init_first              (GtkBitsetIter          *iter,
                                                                  const GtkBitset        *set,
@@ -171,8 +174,6 @@ GDK_AVAILABLE_IN_ALL
 guint                   gtk_bitset_iter_get_value               (const GtkBitsetIter    *iter);
 GDK_AVAILABLE_IN_ALL
 gboolean                gtk_bitset_iter_is_valid                (const GtkBitsetIter    *iter);
-       
-
 
 G_END_DECLS
 


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