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
|