[aravis/dom] gc_converter: port to the new DOM API.
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [aravis/dom] gc_converter: port to the new DOM API.
- Date: Thu, 1 Mar 2012 13:45:45 +0000 (UTC)
commit 6cf6ab87b0883450716b67e76ab89af07682714c
Author: Emmanuel Pacaud <emmanuel gnome org>
Date: Thu Mar 1 14:45:14 2012 +0100
gc_converter: port to the new DOM API.
src/arvgcconverter.c | 181 ++++++++++++++++++++++++++------------------------
src/arvgcconverter.h | 11 ++-
2 files changed, 101 insertions(+), 91 deletions(-)
---
diff --git a/src/arvgcconverter.c b/src/arvgcconverter.c
index fba4348..860d2ab 100644
--- a/src/arvgcconverter.c
+++ b/src/arvgcconverter.c
@@ -1,6 +1,6 @@
/* Aravis - Digital camera library
*
- * Copyright  2009-2010 Emmanuel Pacaud
+ * Copyright  2009-2012 Emmanuel Pacaud
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -26,22 +26,17 @@
*/
#include <arvgcfeaturenode.h>
+#include <arvgcvariablenode.h>
#include <arvgcconverter.h>
#include <arvevaluator.h>
#include <arvgcinteger.h>
#include <arvgcfloat.h>
-#include <arvgcport.h>
#include <arvgc.h>
#include <arvdebug.h>
#include <string.h>
static GObjectClass *parent_class = NULL;
-typedef struct {
- char *name;
- char *node_name;
-} ArvGcConverterVariableInfos;
-
/* ArvDomNode implementation */
static const char *
@@ -55,53 +50,45 @@ arv_gc_converter_get_node_name (ArvDomNode *node)
return "IntConverter";
}
-/* ArvGcFeatureNode implementation */
-
-#if 0
static void
-arv_gc_converter_add_element (ArvGcFeatureNode *node, const char *name, const char *content, const char **attributes)
+arv_gc_converter_post_new_child (ArvDomNode *self, ArvDomNode *child)
{
- ArvGcConverter *gc_converter = ARV_GC_CONVERTER (node);
+ ArvGcConverter *node = ARV_GC_CONVERTER (self);
- if (strcmp (name, "pVariable") == 0) {
- const char *variable_name = NULL;
- int i;
+ if (ARV_IS_GC_PROPERTY_NODE (child)) {
+ ArvGcPropertyNode *property_node = ARV_GC_PROPERTY_NODE (child);
- for (i = 0; attributes[i] != NULL && attributes[i+1] != NULL; i += 2)
- if (g_strcmp0 (attributes[i], "Name") == 0) {
- variable_name = attributes[i+1];
+ switch (arv_gc_property_node_get_node_type (property_node)) {
+ case ARV_GC_PROPERTY_NODE_TYPE_P_VARIABLE:
+ node->variables = g_slist_prepend (node->variables, property_node);
+ break;
+ case ARV_GC_PROPERTY_NODE_TYPE_P_VALUE:
+ node->value = property_node;
+ break;
+ case ARV_GC_PROPERTY_NODE_TYPE_FORMULA_TO:
+ node->formula_to_node = property_node;
+ break;
+ case ARV_GC_PROPERTY_NODE_TYPE_FORMULA_FROM:
+ node->formula_from_node = property_node;
+ break;
+ case ARV_GC_PROPERTY_NODE_TYPE_EXPRESSION:
+ case ARV_GC_PROPERTY_NODE_TYPE_CONSTANT:
+ arv_warning_genicam ("[GcConverter::post_new_child] Constant and Expression not yet implemented");
+ break;
+ default:
+ ARV_DOM_NODE_CLASS (parent_class)->post_new_child (self, child);
break;
- }
-
- if (variable_name != NULL) {
- ArvGcConverterVariableInfos *variable_infos;
-
- variable_infos = g_new (ArvGcConverterVariableInfos, 1);
- variable_infos->name = g_strdup (variable_name);
- variable_infos->node_name = g_strdup (content);
- gc_converter->variables = g_slist_prepend (gc_converter->variables,
- variable_infos);
-
- arv_log_gvcp ("[GcConverter::add_element] Add pVariable '%s' named '%s'",
- content, variable_name);
}
- } else if (strcmp (name, "FormulaTo") == 0) {
- arv_evaluator_set_expression (gc_converter->formula_to, content);
- } else if (strcmp (name, "FormulaFrom") == 0) {
- arv_evaluator_set_expression (gc_converter->formula_from, content);
- } else if (strcmp (name, "pValue") == 0) {
- g_free (gc_converter->value);
- gc_converter->value = g_strdup (content);
- } else if (strcmp (name, "Expression") == 0) {
- g_assert_not_reached ();
- } else if (strcmp (name, "Constant") == 0) {
- g_assert_not_reached ();
- } else
- ARV_GC_FEATURE_NODE_CLASS (parent_class)->add_element (node, name, content, attributes);
+ }
}
-#endif
-/* ArvGcConverter implementation */
+static void
+arv_gc_converter_pre_remove_child (ArvDomNode *self, ArvDomNode *child)
+{
+ g_assert_not_reached ();
+}
+
+/* ArvGcFeatureNode implementation */
static GType
arv_gc_converter_node_get_value_type (ArvGcFeatureNode *node)
@@ -111,6 +98,8 @@ arv_gc_converter_node_get_value_type (ArvGcFeatureNode *node)
return gc_converter->value_type;
}
+/* ArvGcConverter implementation */
+
ArvGcNode *
arv_gc_converter_new (void)
{
@@ -145,22 +134,20 @@ static void
arv_gc_converter_finalize (GObject *object)
{
ArvGcConverter *gc_converter = ARV_GC_CONVERTER (object);
- GSList *iter;
+/* GSList *iter;*/
- for (iter = gc_converter->variables; iter != NULL; iter = iter->next) {
- ArvGcConverterVariableInfos *variable_infos = iter->data;
+/* for (iter = gc_converter->variables; iter != NULL; iter = iter->next) {*/
+/* ArvGcConverterVariableInfos *variable_infos = iter->data;*/
- g_free (variable_infos->name);
- g_free (variable_infos->node_name);
- g_free (variable_infos);
- }
+/* g_free (variable_infos->name);*/
+/* g_free (variable_infos->node_name);*/
+/* g_free (variable_infos);*/
+/* }*/
g_slist_free (gc_converter->variables);
g_object_unref (gc_converter->formula_to);
g_object_unref (gc_converter->formula_from);
- g_free (gc_converter->value);
-
parent_class->finalize (object);
}
@@ -175,7 +162,8 @@ arv_gc_converter_class_init (ArvGcConverterClass *this_class)
object_class->finalize = arv_gc_converter_finalize;
dom_node_class->get_node_name = arv_gc_converter_get_node_name;
-/* gc_feature_node_class->add_element = arv_gc_converter_add_element;*/
+ dom_node_class->post_new_child = arv_gc_converter_post_new_child;
+ dom_node_class->pre_remove_child = arv_gc_converter_pre_remove_child;
gc_feature_node_class->get_value_type = arv_gc_converter_node_get_value_type;
}
@@ -184,70 +172,87 @@ arv_gc_converter_class_init (ArvGcConverterClass *this_class)
static void
_update_from_variables (ArvGcConverter *gc_converter)
{
- ArvGc *genicam;
- ArvGcNode *node;
+ ArvGcNode *node = NULL;
GSList *iter;
+ const char *expression;
- genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_converter));
+ if (gc_converter->formula_from_node != NULL)
+ expression = arv_gc_property_node_get_string (gc_converter->formula_from_node);
+ else
+ expression = "";
+ arv_evaluator_set_expression (gc_converter->formula_from, expression);
for (iter = gc_converter->variables; iter != NULL; iter = iter->next) {
- ArvGcConverterVariableInfos *variable_infos = iter->data;
+ ArvGcVariableNode *variable_node = iter->data;
- node = arv_gc_get_node (genicam, variable_infos->node_name);
+ node = arv_gc_property_node_get_linked_node (ARV_GC_PROPERTY_NODE (variable_node));
if (arv_gc_feature_node_get_value_type (ARV_GC_FEATURE_NODE (node)) == G_TYPE_INT64)
arv_evaluator_set_int64_variable (gc_converter->formula_from,
- variable_infos->name,
+ arv_gc_variable_node_get_name (variable_node),
arv_gc_integer_get_value (ARV_GC_INTEGER (node)));
else if (arv_gc_feature_node_get_value_type (ARV_GC_FEATURE_NODE (node)) == G_TYPE_DOUBLE)
arv_evaluator_set_double_variable (gc_converter->formula_from,
- variable_infos->name,
+ arv_gc_variable_node_get_name (variable_node),
arv_gc_float_get_value (ARV_GC_FLOAT (node)));
}
- node = arv_gc_get_node (genicam, gc_converter->value);
- if (arv_gc_feature_node_get_value_type (ARV_GC_FEATURE_NODE (node)) == G_TYPE_INT64)
- arv_evaluator_set_int64_variable (gc_converter->formula_from,
- "TO",
- arv_gc_integer_get_value (ARV_GC_INTEGER (node)));
- else if (arv_gc_feature_node_get_value_type (ARV_GC_FEATURE_NODE (node)) == G_TYPE_DOUBLE)
- arv_evaluator_set_double_variable (gc_converter->formula_from,
- "TO",
- arv_gc_float_get_value (ARV_GC_FLOAT (node)));
+ if (gc_converter->value != NULL) {
+ node = arv_gc_property_node_get_linked_node (gc_converter->value);
+
+ if (arv_gc_feature_node_get_value_type (ARV_GC_FEATURE_NODE (node)) == G_TYPE_INT64)
+ arv_evaluator_set_int64_variable (gc_converter->formula_from,
+ "TO",
+ arv_gc_integer_get_value (ARV_GC_INTEGER (node)));
+ else if (arv_gc_feature_node_get_value_type (ARV_GC_FEATURE_NODE (node)) == G_TYPE_DOUBLE)
+ arv_evaluator_set_double_variable (gc_converter->formula_from,
+ "TO",
+ arv_gc_float_get_value (ARV_GC_FLOAT (node)));
+ else
+ arv_warning_genicam ("[GcConverter::set_value] Invalid pValue node '%s'",
+ gc_converter->value);
+ }
}
static void
_update_to_variables (ArvGcConverter *gc_converter)
{
- ArvGc *genicam;
ArvGcNode *node;
GSList *iter;
+ const char *expression;
- genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_converter));
+ if (gc_converter->formula_to_node != NULL)
+ expression = arv_gc_property_node_get_string (gc_converter->formula_to_node);
+ else
+ expression = "";
+ arv_evaluator_set_expression (gc_converter->formula_to, expression);
for (iter = gc_converter->variables; iter != NULL; iter = iter->next) {
- ArvGcConverterVariableInfos *variable_infos = iter->data;
+ ArvGcVariableNode *variable_node = iter->data;
- node = arv_gc_get_node (genicam, variable_infos->node_name);
+ node = arv_gc_property_node_get_linked_node (ARV_GC_PROPERTY_NODE (variable_node));
if (arv_gc_feature_node_get_value_type (ARV_GC_FEATURE_NODE (node)) == G_TYPE_INT64)
arv_evaluator_set_int64_variable (gc_converter->formula_to,
- variable_infos->name,
+ arv_gc_variable_node_get_name (variable_node),
arv_gc_integer_get_value (ARV_GC_INTEGER (node)));
else if (arv_gc_feature_node_get_value_type (ARV_GC_FEATURE_NODE (node)) == G_TYPE_DOUBLE)
arv_evaluator_set_double_variable (gc_converter->formula_to,
- variable_infos->name,
+ arv_gc_variable_node_get_name (variable_node),
arv_gc_float_get_value (ARV_GC_FLOAT (node)));
}
- node = arv_gc_get_node (genicam, gc_converter->value);
- if (arv_gc_feature_node_get_value_type (ARV_GC_FEATURE_NODE (node)) == G_TYPE_INT64)
- arv_gc_integer_set_value (ARV_GC_INTEGER (node),
- arv_evaluator_evaluate_as_int64 (gc_converter->formula_to, NULL));
- else if (arv_gc_feature_node_get_value_type (ARV_GC_FEATURE_NODE (node)) == G_TYPE_DOUBLE)
- arv_gc_float_set_value (ARV_GC_FLOAT (node),
- arv_evaluator_evaluate_as_double (gc_converter->formula_to, NULL));
- else
- arv_warning_genicam ("[GcConverter::set_value] Invalid pValue node '%s'",
- gc_converter->value);
+ if (gc_converter->value != NULL) {
+ node = arv_gc_property_node_get_linked_node (gc_converter->value);
+
+ if (arv_gc_feature_node_get_value_type (ARV_GC_FEATURE_NODE (node)) == G_TYPE_INT64)
+ arv_gc_integer_set_value (ARV_GC_INTEGER (node),
+ arv_evaluator_evaluate_as_int64 (gc_converter->formula_to, NULL));
+ else if (arv_gc_feature_node_get_value_type (ARV_GC_FEATURE_NODE (node)) == G_TYPE_DOUBLE)
+ arv_gc_float_set_value (ARV_GC_FLOAT (node),
+ arv_evaluator_evaluate_as_double (gc_converter->formula_to, NULL));
+ else
+ arv_warning_genicam ("[GcConverter::set_value] Invalid pValue node '%s'",
+ gc_converter->value);
+ }
}
static gint64
diff --git a/src/arvgcconverter.h b/src/arvgcconverter.h
index e52a183..ca3e4f7 100644
--- a/src/arvgcconverter.h
+++ b/src/arvgcconverter.h
@@ -1,6 +1,6 @@
/* Aravis - Digital camera library
*
- * Copyright  2009-2010 Emmanuel Pacaud
+ * Copyright  2009-2012 Emmanuel Pacaud
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -25,6 +25,7 @@
#include <arvtypes.h>
#include <arvgcfeaturenode.h>
+#include <arvgcpropertynode.h>
G_BEGIN_DECLS
@@ -41,8 +42,12 @@ struct _ArvGcConverter {
ArvGcFeatureNode node;
GType value_type;
- char *value;
- GSList *variables;
+ GSList *variables; /* ArvGcVariableNode list */
+
+ ArvGcPropertyNode *value;
+ ArvGcPropertyNode *formula_to_node;
+ ArvGcPropertyNode *formula_from_node;
+
ArvEvaluator *formula_to;
ArvEvaluator *formula_from;
};
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]