X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fgrammar.git;a=blobdiff_plain;f=rdp.c;h=3feee7da34e994046756d4a6e954318bdcd4f370;hp=4dbdc6322b3a41b289437a0a57bc90abfd316ea4;hb=aa906f5400c41bc101734eea0e7cbce0f64b2273;hpb=ff6be7b36955b064ae18868ee2d8e0c46b23ddb8 diff --git a/rdp.c b/rdp.c index 4dbdc63..3feee7d 100644 --- a/rdp.c +++ b/rdp.c @@ -27,65 +27,17 @@ void tree_delete (gpointer tree) g_node_destroy (tree); } -static void rdp_init (GTypeInstance* instance, gpointer g_class) +rdp_t* rdp_new (nextcb cb, gpointer data, gint value, grammar_t* grammar) { - Rdp* self = RDP(instance); - self->cb = NULL; - self->data = NULL; - self->buffer = NULL; - self->start = NULL; -} -static void rdp_finalize (GObject* obj) -{ - RdpClass* klass; - GObject* parent_class; - Rdp* self; - self = RDP(obj); - g_free (self->start); - klass = RDP_GET_CLASS(obj); - parent_class = g_type_class_peek_parent (klass); - G_OBJECT_CLASS(parent_class)->finalize (obj); -} + rdp_t* parser; -static void rdp_class_init (RdpClass* klass) -{ - GObjectClass* gobj_class = G_OBJECT_CLASS(klass); - gobj_class->finalize = rdp_finalize; -} - -GType rdp_get_type () -{ - static GType type = 0; - if (type == 0) - { - static const GTypeInfo info = - { - sizeof (RdpClass), - NULL, - NULL, - (GClassInitFunc)rdp_class_init, - NULL, - NULL, - sizeof (Rdp), - 0, - rdp_init - }; - type = g_type_register_static (GRAMMAR_TYPE, "RdpType", &info, 0); - } - return type; -} - -Rdp* rdp_new (nextcb cb, gpointer data, gint value) -{ - - Rdp* parser; - - parser = g_object_new (RDP_TYPE, NULL); + parser = g_malloc (sizeof (rdp_t)); parser->cb = cb; parser->data = data; parser->start = symbol_new (FALSE, value); + parser->grammar = grammar; parser->buffer = g_list_append (NULL, NULL); @@ -93,14 +45,12 @@ Rdp* rdp_new (nextcb cb, gpointer data, gint value) } -void rdp_delete (Rdp* parser) +void rdp_delete (rdp_t* rdp) { - - g_object_unref (parser); - + g_free (rdp->start); } -symbol_t* buffer_next (Rdp* parser, gpointer* attrib) +symbol_t* buffer_next (rdp_t* parser, gpointer* attrib) { buffer_t* buffer; @@ -124,7 +74,7 @@ symbol_t* buffer_next (Rdp* parser, gpointer* attrib) } -gboolean rdp_step (Rdp* parser, symbol_t* symbol, gpointer* attrib) +gboolean rdp_step (rdp_t* parser, symbol_t* symbol, gpointer* attrib) { GList* l; @@ -146,7 +96,8 @@ gboolean rdp_step (Rdp* parser, symbol_t* symbol, gpointer* attrib) return TRUE; } - for (l = grammar_get_rules (parser, symbol); l != NULL; l = g_list_next (l)) + l = grammar_get_rules (parser->grammar, symbol); + for (; l != NULL; l = g_list_next (l)) { rule_t* rule; @@ -197,7 +148,7 @@ gboolean rdp_step (Rdp* parser, symbol_t* symbol, gpointer* attrib) } -gpointer rdp_build (Rdp* parser) +gpointer rdp_build (rdp_t* parser) { gpointer attrib;