[virt-tools-list] [libosinfo 3/5] Add enum param getter/setter helpers
Zeeshan Ali (Khattak)
zeeshanak at gnome.org
Thu Nov 8 17:24:52 UTC 2012
From: "Zeeshan Ali (Khattak)" <zeeshanak at gnome.org>
Add:
* osinfo_entity_get_param_value_enum
* osinfo_entity_set_param_enum
---
osinfo/libosinfo.syms | 3 +++
osinfo/osinfo_entity.c | 39 +++++++++++++++++++++++++++++++++++++++
osinfo/osinfo_entity.h | 5 +++++
3 files changed, 47 insertions(+)
diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
index 2d28388..d291d7e 100644
--- a/osinfo/libosinfo.syms
+++ b/osinfo/libosinfo.syms
@@ -320,6 +320,9 @@ LIBOSINFO_0.2.2 {
osinfo_install_config_param_policy_get_type;
osinfo_media_error_get_type;
osinfo_product_relationship_get_type;
+
+ osinfo_entity_get_param_value_enum;
+ osinfo_entity_set_param_enum;
} LIBOSINFO_0.2.1;
diff --git a/osinfo/osinfo_entity.c b/osinfo/osinfo_entity.c
index 33c73ea..9fabc46 100644
--- a/osinfo/osinfo_entity.c
+++ b/osinfo/osinfo_entity.c
@@ -211,6 +211,20 @@ void osinfo_entity_set_param_int64(OsinfoEntity *entity, const gchar *key, gint6
g_free(str);
}
+void osinfo_entity_set_param_enum(OsinfoEntity *entity, const gchar *key, gint value, GType enum_type)
+{
+ GEnumClass *enum_class;
+ GEnumValue *enum_value;
+
+ g_return_if_fail(G_TYPE_IS_ENUM (enum_type));
+
+ enum_class = g_type_class_ref(enum_type);
+ enum_value = g_enum_get_value(enum_class, value);
+ g_type_class_unref(enum_class);
+
+ osinfo_entity_set_param(entity, key, enum_value->value_nick);
+}
+
/**
* osinfo_entity_add_param:
* @entity: OsinfoEntity containing the parameters
@@ -373,6 +387,31 @@ gint64 osinfo_entity_get_param_value_int64_with_default(OsinfoEntity *entity,
return value;
}
+gint osinfo_entity_get_param_value_enum(OsinfoEntity *entity,
+ const char *key,
+ GType enum_type,
+ gint default_value)
+{
+ const gchar *nick;
+ GEnumClass *enum_class;
+ GEnumValue *enum_value;
+
+ g_return_val_if_fail(G_TYPE_IS_ENUM(enum_type), default_value);
+
+ nick = osinfo_entity_get_param_value(entity, key);
+ if (nick == NULL)
+ return default_value;
+
+ enum_class = g_type_class_ref(enum_type);
+ enum_value = g_enum_get_value_by_nick(enum_class, nick);
+ g_type_class_unref(enum_class);
+
+ if (enum_value != NULL)
+ return enum_value->value;
+
+ g_return_val_if_reached(default_value);
+}
+
/**
* osinfo_entity_get_param_value_list:
* @entity: OsinfoEntity containing the parameters
diff --git a/osinfo/osinfo_entity.h b/osinfo/osinfo_entity.h
index 9ab97a9..7a2654c 100644
--- a/osinfo/osinfo_entity.h
+++ b/osinfo/osinfo_entity.h
@@ -74,6 +74,10 @@ gboolean osinfo_entity_get_param_value_boolean(OsinfoEntity *entity, const gchar
gboolean osinfo_entity_get_param_value_boolean_with_default(OsinfoEntity *entity,
const char *key,
gboolean default_value);
+gint osinfo_entity_get_param_value_enum(OsinfoEntity *entity,
+ const char *key,
+ GType enum_type,
+ gint default_value);
gint64 osinfo_entity_get_param_value_int64(OsinfoEntity *entity, const gchar *key);
gint64 osinfo_entity_get_param_value_int64_with_default(OsinfoEntity *entity,
const gchar *key,
@@ -82,6 +86,7 @@ GList *osinfo_entity_get_param_value_list(OsinfoEntity *entity, const gchar *key
void osinfo_entity_set_param(OsinfoEntity *entity, const gchar *key, const gchar *value);
void osinfo_entity_set_param_boolean(OsinfoEntity *entity, const gchar *key, gboolean value);
void osinfo_entity_set_param_int64(OsinfoEntity *entity, const gchar *key, gint64 value);
+void osinfo_entity_set_param_enum(OsinfoEntity *entity, const gchar *key, gint value, GType enum_type);
void osinfo_entity_add_param(OsinfoEntity *entity, const gchar *key, const gchar *value);
void osinfo_entity_clear_param(OsinfoEntity *entity, const gchar *key);
--
1.8.0
More information about the virt-tools-list
mailing list