static void _cogl_parse_debug_string_for_keys (const char *value, CoglBool enable, const GDebugKey *keys, unsigned int nkeys) { int long_num, key_num; /* g_parse_debug_string expects the value field in GDebugKey to be a mask in an unsigned int but the flags are stored in an array of multiple longs so we need to build a separate array for each possible unsigned int */ for (long_num = 0; long_num < COGL_DEBUG_N_LONGS; long_num++) { int int_num; for (int_num = 0; int_num < sizeof (unsigned long) / sizeof (unsigned int); int_num++) { GDebugKey keys_for_int[sizeof (unsigned int) * 8]; int nkeys_for_int = 0; for (key_num = 0; key_num < nkeys; key_num++) { int long_index = COGL_FLAGS_GET_INDEX (keys[key_num].value); int int_index = (keys[key_num].value % (sizeof (unsigned long) * 8) / (sizeof (unsigned int) * 8)); if (long_index == long_num && int_index == int_num) { keys_for_int[nkeys_for_int] = keys[key_num]; keys_for_int[nkeys_for_int].value = COGL_FLAGS_GET_MASK (keys[key_num].value) >> (int_num * sizeof (unsigned int) * 8); nkeys_for_int++; } } if (nkeys_for_int > 0) { unsigned long mask = ((unsigned long) g_parse_debug_string (value, keys_for_int, nkeys_for_int)) << (int_num * sizeof (unsigned int) * 8); if (enable) _cogl_debug_flags[long_num] |= mask; else _cogl_debug_flags[long_num] &= ~mask; } } }
static void _cogl_parse_debug_string_for_keys (const char *value, gboolean enable, const GDebugKey *keys, unsigned int nkeys) { int int_num, key_num; /* g_parse_debug_string expects the value field in GDebugKey to be a mask in a guint but we may have multiple guints so we need to build a separate array for each possible guint */ for (int_num = 0; int_num < COGL_DEBUG_N_INTS; int_num++) { GDebugKey keys_for_int[sizeof (unsigned int) * 8]; unsigned int mask_for_int; int nkeys_for_int = 0; for (key_num = 0; key_num < nkeys; key_num++) if (COGL_FLAGS_GET_INDEX (keys[key_num].value) == int_num) { keys_for_int[nkeys_for_int] = keys[key_num]; keys_for_int[nkeys_for_int].value = COGL_FLAGS_GET_MASK (keys[key_num].value); nkeys_for_int++; } if (nkeys_for_int > 0) { mask_for_int = g_parse_debug_string (value, keys_for_int, nkeys_for_int); if (enable) _cogl_debug_flags[int_num] |= mask_for_int; else _cogl_debug_flags[int_num] &= ~mask_for_int; } } }