cogl-bitmask: Add a return value for the foreach callback

The foreach callback can now return FALSE to stop the iteration.

Reviewed-by: Robert Bragg <robert@linux.intel.com>
This commit is contained in:
Neil Roberts 2011-10-26 18:43:21 +01:00
parent f4c1ba9ed9
commit dbc31b70cc
4 changed files with 16 additions and 11 deletions

View File

@ -428,13 +428,13 @@ validated:
return status; return status;
} }
static void static gboolean
toggle_enabled_cb (int bit_num, void *user_data) toggle_enabled_cb (int bit_num, void *user_data)
{ {
const CoglBitmask *new_values = user_data; const CoglBitmask *new_values = user_data;
gboolean enabled = _cogl_bitmask_get (new_values, bit_num); gboolean enabled = _cogl_bitmask_get (new_values, bit_num);
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, FALSE);
if (ctx->driver == COGL_DRIVER_GLES2) if (ctx->driver == COGL_DRIVER_GLES2)
{ {
@ -454,6 +454,8 @@ toggle_enabled_cb (int bit_num, void *user_data)
GE( ctx, glDisableClientState (GL_TEXTURE_COORD_ARRAY) ); GE( ctx, glDisableClientState (GL_TEXTURE_COORD_ARRAY) );
} }
#endif #endif
return TRUE;
} }
static void static void

View File

@ -231,7 +231,7 @@ _cogl_bitmask_clear_all_in_array (CoglBitmask *bitmask)
void void
_cogl_bitmask_foreach (const CoglBitmask *bitmask, _cogl_bitmask_foreach (const CoglBitmask *bitmask,
CoglBitmaskForeachFunc func, CoglBitmaskForeachFunc func,
gpointer user_data) void *user_data)
{ {
if (_cogl_bitmask_has_array (bitmask)) if (_cogl_bitmask_has_array (bitmask))
{ {
@ -251,8 +251,9 @@ _cogl_bitmask_foreach (const CoglBitmask *bitmask,
bit += next_bit; bit += next_bit;
mask >>= next_bit; mask >>= next_bit;
func (array_index * sizeof (unsigned long) * 8 + bit - 1, if (!func (array_index * sizeof (unsigned long) * 8 + bit - 1,
user_data); user_data))
return;
} }
} }
} }
@ -268,7 +269,8 @@ _cogl_bitmask_foreach (const CoglBitmask *bitmask,
bit += next_bit; bit += next_bit;
mask >>= next_bit; mask >>= next_bit;
func (bit - 1, user_data); if (!func (bit - 1, user_data))
return;
} }
} }
} }

View File

@ -125,7 +125,8 @@ void
_cogl_bitmask_xor_bits (CoglBitmask *dst, _cogl_bitmask_xor_bits (CoglBitmask *dst,
const CoglBitmask *src); const CoglBitmask *src);
typedef void (* CoglBitmaskForeachFunc) (int bit_num, gpointer user_data); /* The foreach function can return FALSE to stop iteration */
typedef gboolean (* CoglBitmaskForeachFunc) (int bit_num, void *user_data);
/* /*
* cogl_bitmask_foreach: * cogl_bitmask_foreach:
@ -138,7 +139,7 @@ typedef void (* CoglBitmaskForeachFunc) (int bit_num, gpointer user_data);
void void
_cogl_bitmask_foreach (const CoglBitmask *bitmask, _cogl_bitmask_foreach (const CoglBitmask *bitmask,
CoglBitmaskForeachFunc func, CoglBitmaskForeachFunc func,
gpointer user_data); void *user_data);
/* /*
* _cogl_bitmask_get: * _cogl_bitmask_get:

View File

@ -19,7 +19,7 @@ typedef struct
int *bits; int *bits;
} CheckData; } CheckData;
static void static gboolean
check_bit (int bit_num, void *user_data) check_bit (int bit_num, void *user_data)
{ {
CheckData *data = user_data; CheckData *data = user_data;
@ -29,12 +29,12 @@ check_bit (int bit_num, void *user_data)
if (data->bits[i] == bit_num) if (data->bits[i] == bit_num)
{ {
data->bits[i] = -1; data->bits[i] = -1;
return; return TRUE;
} }
g_assert_not_reached (); g_assert_not_reached ();
return; return TRUE;
} }
static void static void