diff --git a/gtk/Makefile.am b/gtk/Makefile.am index da4a4caa83..75ab96d195 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -403,12 +403,14 @@ gtk_private_h_sources = \ gtkapplicationprivate.h \ gtkaccelgroupprivate.h \ gtkaccelmapprivate.h \ + gtkallocatedbitmaskprivate.h \ gtkanimationdescription.h \ gtkappchooserprivate.h \ gtkappchoosermodule.h \ gtkappchooseronline.h \ gtkbindingsprivate.h \ gtkbitmaskprivate.h \ + gtkbitmaskprivateimpl.h \ gtkborderimageprivate.h \ gtkboxprivate.h \ gtkbuilderprivate.h \ @@ -558,6 +560,7 @@ gtk_base_c_sources = \ gtkactivatable.c \ gtkadjustment.c \ gtkalignment.c \ + gtkallocatedbitmask.c \ gtkappchooser.c \ gtkappchooserwidget.c \ gtkappchooserbutton.c \ @@ -573,7 +576,6 @@ gtk_base_c_sources = \ gtkbbox.c \ gtkbin.c \ gtkbindings.c \ - gtkbitmask.c \ gtkborder.c \ gtkborderimage.c \ gtkbox.c \ diff --git a/gtk/gtkbitmask.c b/gtk/gtkallocatedbitmask.c similarity index 59% rename from gtk/gtkbitmask.c rename to gtk/gtkallocatedbitmask.c index 6e47bb23d6..ef2ce9face 100644 --- a/gtk/gtkbitmask.c +++ b/gtk/gtkallocatedbitmask.c @@ -19,7 +19,7 @@ #include -#include "gtk/gtkbitmaskprivate.h" +#include "gtk/gtkallocatedbitmaskprivate.h" #define VALUE_TYPE gsize @@ -32,11 +32,11 @@ struct _GtkBitmask { }; static GtkBitmask * -gtk_bitmask_resize (GtkBitmask *mask, - gsize size) G_GNUC_WARN_UNUSED_RESULT; +gtk_allocated_bitmask_resize (GtkBitmask *mask, + gsize size) G_GNUC_WARN_UNUSED_RESULT; static GtkBitmask * -gtk_bitmask_resize (GtkBitmask *mask, - gsize size) +gtk_allocated_bitmask_resize (GtkBitmask *mask, + gsize size) { gsize i; @@ -51,25 +51,25 @@ gtk_bitmask_resize (GtkBitmask *mask, } GtkBitmask * -_gtk_bitmask_new (void) +_gtk_allocated_bitmask_new (void) { return g_malloc0 (sizeof (GtkBitmask)); } GtkBitmask * -_gtk_bitmask_copy (const GtkBitmask *mask) +_gtk_allocated_bitmask_copy (const GtkBitmask *mask) { GtkBitmask *copy; g_return_val_if_fail (mask != NULL, NULL); - copy = _gtk_bitmask_new (); + copy = _gtk_allocated_bitmask_new (); - return _gtk_bitmask_union (copy, mask); + return _gtk_allocated_bitmask_union (copy, mask); } void -_gtk_bitmask_free (GtkBitmask *mask) +_gtk_allocated_bitmask_free (GtkBitmask *mask) { g_return_if_fail (mask != NULL); @@ -77,8 +77,8 @@ _gtk_bitmask_free (GtkBitmask *mask) } void -_gtk_bitmask_print (const GtkBitmask *mask, - GString *string) +_gtk_allocated_bitmask_print (const GtkBitmask *mask, + GString *string) { int i; @@ -87,7 +87,7 @@ _gtk_bitmask_print (const GtkBitmask *mask, for (i = mask->len * VALUE_SIZE_BITS - 1; i >= 0; i--) { - if (_gtk_bitmask_get (mask, i)) + if (_gtk_allocated_bitmask_get (mask, i)) break; } @@ -99,28 +99,28 @@ _gtk_bitmask_print (const GtkBitmask *mask, for (; i >= 0; i--) { - g_string_append_c (string, _gtk_bitmask_get (mask, i) ? '1' : '0'); + g_string_append_c (string, _gtk_allocated_bitmask_get (mask, i) ? '1' : '0'); } } char * -_gtk_bitmask_to_string (const GtkBitmask *mask) +_gtk_allocated_bitmask_to_string (const GtkBitmask *mask) { GString *string; string = g_string_new (NULL); - _gtk_bitmask_print (mask, string); + _gtk_allocated_bitmask_print (mask, string); return g_string_free (string, FALSE); } /* NB: Call this function whenever the * array might have become too large. - * _gtk_bitmask_is_empty() depends on this. + * _gtk_allocated_bitmask_is_empty() depends on this. */ static GtkBitmask * -gtk_bitmask_shrink (GtkBitmask *mask) G_GNUC_WARN_UNUSED_RESULT; +gtk_allocated_bitmask_shrink (GtkBitmask *mask) G_GNUC_WARN_UNUSED_RESULT; static GtkBitmask * -gtk_bitmask_shrink (GtkBitmask *mask) +gtk_allocated_bitmask_shrink (GtkBitmask *mask) { guint i; @@ -130,37 +130,37 @@ gtk_bitmask_shrink (GtkBitmask *mask) break; } - return gtk_bitmask_resize (mask, i); + return gtk_allocated_bitmask_resize (mask, i); } GtkBitmask * -_gtk_bitmask_intersect (GtkBitmask *mask, - const GtkBitmask *other) +_gtk_allocated_bitmask_intersect (GtkBitmask *mask, + const GtkBitmask *other) { guint i; g_return_val_if_fail (mask != NULL, NULL); g_return_val_if_fail (other != NULL, NULL); - mask = gtk_bitmask_resize (mask, MIN (mask->len, other->len)); + mask = gtk_allocated_bitmask_resize (mask, MIN (mask->len, other->len)); for (i = 0; i < mask->len; i++) { mask->data[i] &= other->data[i]; } - return gtk_bitmask_shrink (mask); + return gtk_allocated_bitmask_shrink (mask); } GtkBitmask * -_gtk_bitmask_union (GtkBitmask *mask, - const GtkBitmask *other) +_gtk_allocated_bitmask_union (GtkBitmask *mask, + const GtkBitmask *other) { guint i; g_return_val_if_fail (mask != NULL, NULL); g_return_val_if_fail (other != NULL, NULL); - mask = gtk_bitmask_resize (mask, MAX (mask->len, other->len)); + mask = gtk_allocated_bitmask_resize (mask, MAX (mask->len, other->len)); for (i = 0; i < other->len; i++) { mask->data[i] |= other->data[i]; @@ -170,8 +170,8 @@ _gtk_bitmask_union (GtkBitmask *mask, } GtkBitmask * -_gtk_bitmask_subtract (GtkBitmask *mask, - const GtkBitmask *other) +_gtk_allocated_bitmask_subtract (GtkBitmask *mask, + const GtkBitmask *other) { guint i; @@ -183,27 +183,27 @@ _gtk_bitmask_subtract (GtkBitmask *mask, mask->data[i] |= ~other->data[i]; } - return gtk_bitmask_shrink (mask); + return gtk_allocated_bitmask_shrink (mask); } static void -gtk_bitmask_indexes (guint index_, - guint *array_index, - guint *bit_index) +gtk_allocated_bitmask_indexes (guint index_, + guint *array_index, + guint *bit_index) { *array_index = index_ / VALUE_SIZE_BITS; *bit_index = index_ % VALUE_SIZE_BITS; } gboolean -_gtk_bitmask_get (const GtkBitmask *mask, - guint index_) +_gtk_allocated_bitmask_get (const GtkBitmask *mask, + guint index_) { guint array_index, bit_index; g_return_val_if_fail (mask != NULL, FALSE); - gtk_bitmask_indexes (index_, &array_index, &bit_index); + gtk_allocated_bitmask_indexes (index_, &array_index, &bit_index); if (array_index >= mask->len) return FALSE; @@ -212,20 +212,20 @@ _gtk_bitmask_get (const GtkBitmask *mask, } GtkBitmask * -_gtk_bitmask_set (GtkBitmask *mask, - guint index_, - gboolean value) +_gtk_allocated_bitmask_set (GtkBitmask *mask, + guint index_, + gboolean value) { guint array_index, bit_index; g_return_val_if_fail (mask != NULL, NULL); - gtk_bitmask_indexes (index_, &array_index, &bit_index); + gtk_allocated_bitmask_indexes (index_, &array_index, &bit_index); if (value) { if (array_index >= mask->len) - mask = gtk_bitmask_resize (mask, array_index + 1); + mask = gtk_allocated_bitmask_resize (mask, array_index + 1); mask->data[array_index] |= VALUE_BIT (bit_index); } @@ -234,7 +234,7 @@ _gtk_bitmask_set (GtkBitmask *mask, if (array_index < mask->len) { mask->data[array_index] &= ~ VALUE_BIT (bit_index); - mask = gtk_bitmask_shrink (mask); + mask = gtk_allocated_bitmask_shrink (mask); } } @@ -242,9 +242,9 @@ _gtk_bitmask_set (GtkBitmask *mask, } GtkBitmask * -_gtk_bitmask_invert_range (GtkBitmask *mask, - guint start, - guint end) +_gtk_allocated_bitmask_invert_range (GtkBitmask *mask, + guint start, + guint end) { guint i; @@ -254,13 +254,13 @@ _gtk_bitmask_invert_range (GtkBitmask *mask, /* I CAN HAS SPEEDUP? */ for (i = start; i < end; i++) - mask = _gtk_bitmask_set (mask, i, !_gtk_bitmask_get (mask, i)); + mask = _gtk_allocated_bitmask_set (mask, i, !_gtk_allocated_bitmask_get (mask, i)); return mask; } gboolean -_gtk_bitmask_is_empty (const GtkBitmask *mask) +_gtk_allocated_bitmask_is_empty (const GtkBitmask *mask) { g_return_val_if_fail (mask != NULL, FALSE); @@ -268,8 +268,8 @@ _gtk_bitmask_is_empty (const GtkBitmask *mask) } gboolean -_gtk_bitmask_equals (const GtkBitmask *mask, - const GtkBitmask *other) +_gtk_allocated_bitmask_equals (const GtkBitmask *mask, + const GtkBitmask *other) { guint i; @@ -289,8 +289,8 @@ _gtk_bitmask_equals (const GtkBitmask *mask, } gboolean -_gtk_bitmask_intersects (const GtkBitmask *mask, - const GtkBitmask *other) +_gtk_allocated_bitmask_intersects (const GtkBitmask *mask, + const GtkBitmask *other) { int i; diff --git a/gtk/gtkallocatedbitmaskprivate.h b/gtk/gtkallocatedbitmaskprivate.h new file mode 100644 index 0000000000..023b70d73c --- /dev/null +++ b/gtk/gtkallocatedbitmaskprivate.h @@ -0,0 +1,64 @@ +/* + * Copyright © 2011 Red Hat Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: Benjamin Otte + */ + +#ifndef __GTK_ALLOCATED_BITMASK_PRIVATE_H__ +#define __GTK_ALLOCATED_BITMASK_PRIVATE_H__ + +#include + +G_BEGIN_DECLS + +typedef struct _GtkBitmask GtkBitmask; + + +GtkBitmask * _gtk_allocated_bitmask_new (void); +GtkBitmask * _gtk_allocated_bitmask_copy (const GtkBitmask *mask); +void _gtk_allocated_bitmask_free (GtkBitmask *mask); + +char * _gtk_allocated_bitmask_to_string (const GtkBitmask *mask); +void _gtk_allocated_bitmask_print (const GtkBitmask *mask, + GString *string); + +GtkBitmask * _gtk_allocated_bitmask_intersect (GtkBitmask *mask, + const GtkBitmask *other) G_GNUC_WARN_UNUSED_RESULT; +GtkBitmask * _gtk_allocated_bitmask_union (GtkBitmask *mask, + const GtkBitmask *other) G_GNUC_WARN_UNUSED_RESULT; +GtkBitmask * _gtk_allocated_bitmask_subtract (GtkBitmask *mask, + const GtkBitmask *other) G_GNUC_WARN_UNUSED_RESULT; + +gboolean _gtk_allocated_bitmask_get (const GtkBitmask *mask, + guint index_); +GtkBitmask * _gtk_allocated_bitmask_set (GtkBitmask *mask, + guint index_, + gboolean value) G_GNUC_WARN_UNUSED_RESULT; + +GtkBitmask * _gtk_allocated_bitmask_invert_range (GtkBitmask *mask, + guint start, + guint end) G_GNUC_WARN_UNUSED_RESULT; + +gboolean _gtk_allocated_bitmask_is_empty (const GtkBitmask *mask); +gboolean _gtk_allocated_bitmask_equals (const GtkBitmask *mask, + const GtkBitmask *other); +gboolean _gtk_allocated_bitmask_intersects (const GtkBitmask *mask, + const GtkBitmask *other); + +G_END_DECLS + +#endif /* __GTK_ALLOCATED_BITMASK_PRIVATE_H__ */ diff --git a/gtk/gtkbitmaskprivate.h b/gtk/gtkbitmaskprivate.h index 7fad1f2ce7..5e61c3c70c 100644 --- a/gtk/gtkbitmaskprivate.h +++ b/gtk/gtkbitmaskprivate.h @@ -27,36 +27,44 @@ G_BEGIN_DECLS typedef struct _GtkBitmask GtkBitmask; -GtkBitmask * _gtk_bitmask_new (void); -GtkBitmask * _gtk_bitmask_copy (const GtkBitmask *mask); -void _gtk_bitmask_free (GtkBitmask *mask); +static inline GtkBitmask * _gtk_bitmask_new (void); +static inline GtkBitmask * _gtk_bitmask_copy (const GtkBitmask *mask); +static inline void _gtk_bitmask_free (GtkBitmask *mask); -char * _gtk_bitmask_to_string (const GtkBitmask *mask); -void _gtk_bitmask_print (const GtkBitmask *mask, - GString *string); +static inline char * _gtk_bitmask_to_string (const GtkBitmask *mask); +static inline void _gtk_bitmask_print (const GtkBitmask *mask, + GString *string); -GtkBitmask * _gtk_bitmask_intersect (GtkBitmask *mask, - const GtkBitmask *other) G_GNUC_WARN_UNUSED_RESULT; -GtkBitmask * _gtk_bitmask_union (GtkBitmask *mask, - const GtkBitmask *other) G_GNUC_WARN_UNUSED_RESULT; -GtkBitmask * _gtk_bitmask_subtract (GtkBitmask *mask, - const GtkBitmask *other) G_GNUC_WARN_UNUSED_RESULT; +static inline GtkBitmask * _gtk_bitmask_intersect (GtkBitmask *mask, + const GtkBitmask *other) G_GNUC_WARN_UNUSED_RESULT; +static inline GtkBitmask * _gtk_bitmask_union (GtkBitmask *mask, + const GtkBitmask *other) G_GNUC_WARN_UNUSED_RESULT; +static inline GtkBitmask * _gtk_bitmask_subtract (GtkBitmask *mask, + const GtkBitmask *other) G_GNUC_WARN_UNUSED_RESULT; -gboolean _gtk_bitmask_get (const GtkBitmask *mask, - guint index_); -GtkBitmask * _gtk_bitmask_set (GtkBitmask *mask, - guint index_, - gboolean value) G_GNUC_WARN_UNUSED_RESULT; +static inline gboolean _gtk_bitmask_get (const GtkBitmask *mask, + guint index_); +static inline GtkBitmask * _gtk_bitmask_set (GtkBitmask *mask, + guint index_, + gboolean value) G_GNUC_WARN_UNUSED_RESULT; -GtkBitmask * _gtk_bitmask_invert_range (GtkBitmask *mask, - guint start, - guint end) G_GNUC_WARN_UNUSED_RESULT; +static inline GtkBitmask * _gtk_bitmask_invert_range (GtkBitmask *mask, + guint start, + guint end) G_GNUC_WARN_UNUSED_RESULT; + +static inline gboolean _gtk_bitmask_is_empty (const GtkBitmask *mask); +static inline gboolean _gtk_bitmask_equals (const GtkBitmask *mask, + const GtkBitmask *other); +static inline gboolean _gtk_bitmask_intersects (const GtkBitmask *mask, + const GtkBitmask *other); + + +/* This is the actual implementation of the functions declared above. + * We put it in a separate file so people don't get scared from looking at this + * file when reading source code. + */ +#include "gtkbitmaskprivateimpl.h" -gboolean _gtk_bitmask_is_empty (const GtkBitmask *mask); -gboolean _gtk_bitmask_equals (const GtkBitmask *mask, - const GtkBitmask *other); -gboolean _gtk_bitmask_intersects (const GtkBitmask *mask, - const GtkBitmask *other); G_END_DECLS diff --git a/gtk/gtkbitmaskprivateimpl.h b/gtk/gtkbitmaskprivateimpl.h new file mode 100644 index 0000000000..365d438e3d --- /dev/null +++ b/gtk/gtkbitmaskprivateimpl.h @@ -0,0 +1,116 @@ +/* + * Copyright © 2011 Red Hat Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: Benjamin Otte + */ + +#include "gtkallocatedbitmaskprivate.h" + +static inline GtkBitmask * +_gtk_bitmask_new (void) +{ + return _gtk_allocated_bitmask_new (); +} + +static inline GtkBitmask * +_gtk_bitmask_copy (const GtkBitmask *mask) +{ + return _gtk_allocated_bitmask_copy (mask); +} + +static inline void +_gtk_bitmask_free (GtkBitmask *mask) +{ + return _gtk_allocated_bitmask_free (mask); +} + +static inline char * +_gtk_bitmask_to_string (const GtkBitmask *mask) +{ + return _gtk_allocated_bitmask_to_string (mask); +} + +static inline void +_gtk_bitmask_print (const GtkBitmask *mask, + GString *string) +{ + return _gtk_allocated_bitmask_print (mask, string); +} + +static inline GtkBitmask * +_gtk_bitmask_intersect (GtkBitmask *mask, + const GtkBitmask *other) +{ + return _gtk_allocated_bitmask_intersect (mask, other); +} + +static inline GtkBitmask * +_gtk_bitmask_union (GtkBitmask *mask, + const GtkBitmask *other) +{ + return _gtk_allocated_bitmask_union (mask, other); +} + +static inline GtkBitmask * +_gtk_bitmask_subtract (GtkBitmask *mask, + const GtkBitmask *other) +{ + return _gtk_allocated_bitmask_subtract (mask, other); +} + +static inline gboolean +_gtk_bitmask_get (const GtkBitmask *mask, + guint index_) +{ + return _gtk_allocated_bitmask_get (mask, index_); +} + +static inline GtkBitmask * +_gtk_bitmask_set (GtkBitmask *mask, + guint index_, + gboolean value) +{ + return _gtk_allocated_bitmask_set (mask, index_, value); +} + +static inline GtkBitmask * +_gtk_bitmask_invert_range (GtkBitmask *mask, + guint start, + guint end) +{ + return _gtk_allocated_bitmask_invert_range (mask, start, end); +} + +static inline gboolean +_gtk_bitmask_is_empty (const GtkBitmask *mask) +{ + return _gtk_allocated_bitmask_is_empty (mask); +} + +static inline gboolean +_gtk_bitmask_equals (const GtkBitmask *mask, + const GtkBitmask *other) +{ + return _gtk_allocated_bitmask_equals (mask, other); +} + +static inline gboolean +_gtk_bitmask_intersects (const GtkBitmask *mask, + const GtkBitmask *other) +{ + return _gtk_allocated_bitmask_intersects (mask, other); +} diff --git a/gtk/tests/Makefile.am b/gtk/tests/Makefile.am index f02387f9b8..b8ef3146b8 100644 --- a/gtk/tests/Makefile.am +++ b/gtk/tests/Makefile.am @@ -136,7 +136,10 @@ rbtree_LDADD = $(GTK_DEP_LIBS) TEST_PROGS += bitmask bitmask_CFLAGS = -DGTK_COMPILATION -UG_ENABLE_DEBUG -bitmask_SOURCES = bitmask.c ../gtkbitmaskprivate.h ../gtkbitmask.c +bitmask_SOURCES = bitmask.c \ + ../gtkbitmaskprivate.h \ + ../gtkallocatedbitmaskprivate.h \ + ../gtkallocatedbitmask.c bitmask_LDADD = $(GTK_DEP_LIBS) TEST_PROGS += regression-tests