aboutsummaryrefslogtreecommitdiff
path: root/lib/experiment-reader/experiment-reader.c
blob: fc2237850ddc2806db9b69b95a21f8754388ce9e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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