[geany/geany] 9f06d4: Use union for StashTreeValue instead of void*
Nick Treleaven
git-noreply at xxxxx
Sat Apr 7 17:09:28 UTC 2012
Branch: refs/heads/master
Author: Nick Treleaven <nick.treleaven at btinternet.com>
Committer: Nick Treleaven <nick.treleaven at btinternet.com>
Date: Sat, 07 Apr 2012 17:09:28
Commit: 9f06d49f6f43aa54d00f7815a12bc8320dee8cfc
https://github.com/geany/geany/commit/9f06d49f6f43aa54d00f7815a12bc8320dee8cfc
Log Message:
-----------
Use union for StashTreeValue instead of void*
This avoids many casts.
Modified Paths:
--------------
src/stash.c
Modified: src/stash.c
42 files changed, 19 insertions(+), 23 deletions(-)
===================================================================
@@ -927,10 +927,14 @@ enum
struct StashTreeValue
{
GType setting_type;
- gpointer setting;
const gchar *key_name;
const gchar *group_name;
StashPref *pref;
+ union
+ {
+ gchararray tree_string;
+ gint tree_int;
+ } data;
};
typedef struct StashTreeValue StashTreeValue;
@@ -953,17 +957,17 @@ static void stash_tree_renderer_set_data(GtkCellLayout *cell_layout, GtkCellRend
switch (value->setting_type)
{
case G_TYPE_BOOLEAN:
- g_object_set(cell, "active", GPOINTER_TO_INT(value->setting), NULL);
+ g_object_set(cell, "active", value->data.tree_int, NULL);
break;
case G_TYPE_INT:
{
- gchar *text = g_strdup_printf("%d", GPOINTER_TO_INT(value->setting));
+ gchar *text = g_strdup_printf("%d", value->data.tree_int);
g_object_set(cell, "text", text, NULL);
g_free(text);
break;
}
case G_TYPE_STRING:
- g_object_set(cell, "text", (gchararray) value->setting, NULL);
+ g_object_set(cell, "text", value->data.tree_string, NULL);
break;
}
}
@@ -983,14 +987,13 @@ static void stash_tree_renderer_edited(gchar *path_str, gchar *new_text, GtkTree
switch (value->setting_type)
{
case G_TYPE_BOOLEAN:
- value->setting = GINT_TO_POINTER(!GPOINTER_TO_INT(value->setting));
+ value->data.tree_int = !value->data.tree_int;
break;
case G_TYPE_INT:
- value->setting = GINT_TO_POINTER(atoi(new_text));
+ value->data.tree_int = atoi(new_text);
break;
case G_TYPE_STRING:
- g_free(value->setting);
- value->setting = g_strdup(new_text);
+ SETPTR(value->data.tree_string, g_strdup(new_text));
break;
}
@@ -1020,7 +1023,7 @@ static gboolean stash_tree_discard_value(GtkTreeModel *model, GtkTreePath *path,
gtk_tree_model_get(model, iter, STASH_TREE_VALUE, &value, -1);
if (value->setting_type == G_TYPE_STRING)
- g_free(value->setting);
+ g_free(value->data.tree_string);
g_free(value);
return FALSE;
@@ -1040,10 +1043,9 @@ static void stash_tree_append_pref(StashGroup *group, StashPref *entry, GtkListS
GtkTreeIter iter;
StashTreeValue *value;
- value = g_new(StashTreeValue, 1);
+ value = g_new0(StashTreeValue, 1);
value->setting_type = entry->setting_type;
- value->setting = NULL;
value->key_name = entry->key_name;
value->group_name = group->name;
value->pref = entry;
@@ -1132,17 +1134,14 @@ static void stash_tree_display_pref(StashTreeValue *value, StashPref *entry)
switch (entry->setting_type)
{
case G_TYPE_BOOLEAN:
- value->setting = GINT_TO_POINTER(*(gboolean *) entry->setting);
+ value->data.tree_int = *(gboolean *) entry->setting;
break;
case G_TYPE_INT:
- value->setting = GINT_TO_POINTER(*(gint *) entry->setting);
+ value->data.tree_int = *(gint *) entry->setting;
break;
case G_TYPE_STRING:
- {
- g_free(value->setting);
- value->setting = g_strdup(*(gchararray *) entry->setting);
+ SETPTR(value->data.tree_string, g_strdup(*(gchararray *) entry->setting));
break;
- }
default:
g_warning("Unhandled type for %s::%s in %s()!", value->group_name,
entry->key_name, G_STRFUNC);
@@ -1152,21 +1151,18 @@ static void stash_tree_display_pref(StashTreeValue *value, StashPref *entry)
static void stash_tree_update_pref(StashTreeValue *value, StashPref *entry)
{
- gpointer *setting = value->setting;
-
switch (entry->setting_type)
{
case G_TYPE_BOOLEAN:
- *(gboolean *) entry->setting = GPOINTER_TO_INT(setting);
+ *(gboolean *) entry->setting = value->data.tree_int;
break;
case G_TYPE_INT:
- *(gint *) entry->setting = GPOINTER_TO_INT(setting);
+ *(gint *) entry->setting = value->data.tree_int;
break;
case G_TYPE_STRING:
{
gchararray *text = entry->setting;
- g_free(*text);
- *text = g_strdup((gchararray) setting);
+ SETPTR(*text, g_strdup(value->data.tree_string));
break;
}
default:
@@ Diff output truncated at 100000 characters. @@
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: TBD).
More information about the Commits
mailing list