| |
| |
| typedef struct { |
| guint64 value; |
| const gchar *value_name; |
| const gchar *value_nick; |
| } GFlags64Value; |
| |
| |
| |
| |
| |
| |
| |
| |
| static const GFlags64Value @enum_name@_values[] = { |
| |
| |
| { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, |
| |
| |
| { 0, NULL, NULL } |
| }; |
| |
| gchar * |
| @enum_name@_build_string_from_mask (@EnumName@ mask) |
| { |
| guint i; |
| gboolean first = TRUE; |
| GString *str = NULL; |
| |
| for (i = 0; @enum_name@_values[i].value_nick; i++) { |
| |
| if (mask == @enum_name@_values[i].value) { |
| if (str) |
| g_string_free (str, TRUE); |
| return g_strdup (@enum_name@_values[i].value_nick); |
| } |
| |
| |
| if (mask & @enum_name@_values[i].value) { |
| guint c; |
| guint64 number = @enum_name@_values[i].value; |
| |
| for (c = 0; number; c++) |
| number &= number - 1; |
| |
| if (c == 1) { |
| if (!str) |
| str = g_string_new (""); |
| g_string_append_printf (str, "%s%s", |
| first ? "" : ", ", |
| @enum_name@_values[i].value_nick); |
| if (first) |
| first = FALSE; |
| } |
| } |
| } |
| |
| return (str ? g_string_free (str, FALSE) : NULL); |
| } |
| |
| |
| |
| |
| |