aboutsummaryrefslogtreecommitdiff
path: root/lib/experiment-reader/experiment-reader.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/experiment-reader/experiment-reader.c')
-rw-r--r--lib/experiment-reader/experiment-reader.c113
1 files changed, 113 insertions, 0 deletions
diff --git a/lib/experiment-reader/experiment-reader.c b/lib/experiment-reader/experiment-reader.c
new file mode 100644
index 0000000..fc22378
--- /dev/null
+++ b/lib/experiment-reader/experiment-reader.c
@@ -0,0 +1,113 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <assert.h>
+
+#include <glib.h>
+#include <glib/gprintf.h>
+
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/xpath.h>
+#include <libxml/xpathInternals.h>
+
+#include "experiment-reader.h"
+
+static void experiment_reader_class_init(ExperimentReaderClass *klass);
+static void experiment_reader_init(ExperimentReader *klass);
+static void experiment_reader_finalize(GObject *gobject);
+
+#define EXPERIMENT_READER_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE((obj), EXPERIMENT_TYPE_READER, ExperimentReaderPrivate))
+
+struct _ExperimentReaderPrivate {
+ xmlDoc *doc;
+};
+
+GType
+experiment_reader_get_type(void)
+{
+ static GType type = 0;
+
+ if (!type) {
+ const GTypeInfo info = {
+ sizeof(ExperimentReaderClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc)experiment_reader_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof(ExperimentReader),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc)experiment_reader_init,
+ };
+
+ type = g_type_register_static(G_TYPE_OBJECT,
+ "ExperimentReader", &info, 0);
+ }
+
+ return type;
+}
+
+static void
+experiment_reader_class_init(ExperimentReaderClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+
+ /* gobject_class->dispose = experiment_reader_dispose; */
+ gobject_class->finalize = experiment_reader_finalize;
+
+ g_type_class_add_private(klass, sizeof(ExperimentReaderPrivate));
+}
+
+static void
+experiment_reader_init(ExperimentReader *klass)
+{
+ klass->priv = EXPERIMENT_READER_GET_PRIVATE(klass);
+
+ klass->priv->doc = NULL;
+}
+
+static void
+experiment_reader_finalize(GObject *gobject)
+{
+ ExperimentReader *reader = EXPERIMENT_READER(gobject);
+
+ if (reader->priv->doc != NULL)
+ xmlFreeDoc(reader->priv->doc);
+
+ /* Chain up to the parent class */
+ //G_OBJECT_CLASS(experiment_reader_parent_class)->finalize(gobject);
+}
+
+/*
+ * API
+ */
+
+ExperimentReader *
+experiment_reader_new(const gchar *filename)
+{
+ ExperimentReader *reader;
+
+ reader = EXPERIMENT_READER(g_object_new(EXPERIMENT_TYPE_READER, NULL));
+ reader->priv->doc = xmlParseFile(filename);
+ if (reader->priv->doc == NULL) {
+ g_object_unref(G_OBJECT(reader));
+ return NULL;
+ }
+
+ /* TODO: validate against session.dtd */
+
+ return reader;
+}
+
+#if 0
+void
+experiment_reader_greeting_foreach_topic(ExperimentReader *reader,
+ ExperimentReaderTopicCb cb,
+ gpointer data)
+{
+
+}
+#endif \ No newline at end of file