[anjuta/sdb-queries: 18/22] symbol-db: Created new query results class implementing IAnjutaSymbol and IAnjutaIterable



commit 020bb216ffee94c5fba60132fea7369c1bfa3880
Author: Naba Kumar <naba gnome org>
Date:   Mon May 31 23:36:55 2010 +0300

    symbol-db: Created new query results class implementing IAnjutaSymbol and IAnjutaIterable

 plugins/symbol-db/Makefile.am              |    4 +-
 plugins/symbol-db/symbol-db-query-result.c |  491 ++++++++++++++++++++++++++++
 plugins/symbol-db/symbol-db-query-result.h |   66 ++++
 3 files changed, 560 insertions(+), 1 deletions(-)
---
diff --git a/plugins/symbol-db/Makefile.am b/plugins/symbol-db/Makefile.am
index 140f5b8..42ec570 100644
--- a/plugins/symbol-db/Makefile.am
+++ b/plugins/symbol-db/Makefile.am
@@ -90,7 +90,9 @@ libanjuta_symbol_db_la_SOURCES = \
 	libgda-extra/gda-data-model-concat.h \
 	$(BUILT_SOURCES) \
 	symbol-db-query.h \
-	symbol-db-query.c
+	symbol-db-query.c \
+	symbol-db-query-result.h \
+	symbol-db-query-result.c
 
 libanjuta_symbol_db_la_LDFLAGS = $(ANJUTA_PLUGIN_LDFLAGS)
 
diff --git a/plugins/symbol-db/symbol-db-query-result.c b/plugins/symbol-db/symbol-db-query-result.c
new file mode 100644
index 0000000..490b7cf
--- /dev/null
+++ b/plugins/symbol-db/symbol-db-query-result.c
@@ -0,0 +1,491 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
+/*
+ * anjuta
+ * Copyright (C) Massimo Cora' 2007-2008 <maxcvs email it>
+ * Copyright (C) Naba Kumar 2010 <naba gnome org>
+ * 
+ * anjuta is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * anjuta is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libanjuta/interfaces/ianjuta-symbol.h>
+#include <libanjuta/interfaces/ianjuta-iterable.h>
+#include <libanjuta/anjuta-utils.h>
+#include <libanjuta/anjuta-debug.h>
+
+#include <libgda/libgda.h>
+#include "symbol-db-query-result.h"
+#include "symbol-db-engine-utils.h"
+
+#define SYMBOL_DB_QUERY_RESULT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
+	SYMBOL_DB_TYPE_QUERY_RESULT, SymbolDBQueryResultPriv))
+
+#define FIELD_INDEX(f) (sdb_query_result_get_field_index(f))
+
+enum {
+	PROP_SDB_0,
+	PROP_SDB_COLUMNS,
+	PROP_SDB_DATA_MODEL,
+	PROP_SDB_DATA_ITER,
+	PROP_SDB_SYM_TYPE_CONVERSION_HASH,
+	PROP_SDB_PROJECT_ROOT
+};
+
+struct _SymbolDBQueryResultPriv
+{
+	IAnjutaSymbolField valid_fields;
+	gint *col_map;
+	GdaDataModelIter *iter;
+	const GHashTable *sym_type_conversion_hash;
+	gchar *project_root;
+};
+
+static GObjectClass* parent_class = NULL;
+
+GQuark
+symbol_db_query_result_error_quark (void)
+{
+	return g_quark_from_static_string ("symbol-db-query-return-error-quark");
+}
+
+G_INLINE_FUNC gint
+sdb_query_result_get_field_index (IAnjutaSymbolField field)
+{
+	gint idx = 0;
+	while (field >>= 1)
+		idx++;
+	return idx;
+}
+
+static gboolean
+sdb_query_result_validate_field (SymbolDBQueryResult *result,
+                                 IAnjutaSymbolField field,
+                                 GError **err)
+{
+	g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+	
+	if (field >= IANJUTA_SYMBOL_FIELD_END)
+	{
+		g_set_error (err, SYMBOL_DB_QUERY_RESULT_ERROR,
+		             SYMBOL_DB_QUERY_RESULT_ERROR_INVALID_FIELD,
+		             "Invalid symbol query field '%d'. It should be less than '%d'",
+		             field, IANJUTA_SYMBOL_FIELD_END);
+		return FALSE;
+	}
+	
+	if (result->priv->valid_fields & field)
+	{
+		g_set_error (err, SYMBOL_DB_QUERY_RESULT_ERROR,
+		             SYMBOL_DB_QUERY_RESULT_ERROR_FIELD_NOT_PRESENT,
+		             "Symbol field '%' is present in the query. Make sure to "
+		             "include the during query creation.", field);
+		return FALSE;
+	}
+	return TRUE;
+}
+
+static void
+sdb_query_result_instance_init (SymbolDBQueryResult *result)
+{
+	gint i, fields_count;
+	
+	result->priv = SYMBOL_DB_QUERY_RESULT_GET_PRIVATE (result);
+	fields_count = FIELD_INDEX(IANJUTA_SYMBOL_FIELD_END);
+	result->priv->col_map = g_new (gint, fields_count);
+	for (i = 0; i < fields_count; i++)
+		result->priv->col_map[i] = -1;
+}
+
+static void
+sdb_query_result_finalize (GObject *object)
+{
+	SymbolDBQueryResult *result = SYMBOL_DB_QUERY_RESULT (object);
+	
+	g_free (result->priv->col_map);
+	G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+sdb_query_result_set_property (GObject *object, guint prop_id,
+                               const GValue *value, GParamSpec *pspec)
+{
+	gint i;
+	GdaDataModel *data_model;
+	IAnjutaSymbolField *cols_order;
+	SymbolDBQueryResultPriv *priv;
+
+	g_return_if_fail (SYMBOL_DB_IS_QUERY_RESULT (object));
+	priv = SYMBOL_DB_QUERY_RESULT (object)->priv;
+	
+	switch (prop_id)
+	{
+	case PROP_SDB_COLUMNS:
+		for (i = 0; i < FIELD_INDEX (IANJUTA_SYMBOL_FIELD_END); i++)
+			priv->col_map[i] = -1;
+		i = 0;
+		cols_order = g_value_get_pointer (value);
+		while (!(*cols_order & IANJUTA_SYMBOL_FIELD_END))
+		{
+			priv->col_map[FIELD_INDEX (*cols_order)] = i;
+			i++;
+			cols_order++;
+		}
+		break;
+	case PROP_SDB_DATA_MODEL:
+		if (priv->iter)
+			g_object_unref (priv->iter);
+		data_model = GDA_DATA_MODEL (g_value_get_object (value));
+		priv->iter = gda_data_model_create_iter (data_model);
+		gda_data_model_iter_move_at_row (priv->iter, 0);
+		g_object_unref (data_model);
+		break;
+	case PROP_SDB_SYM_TYPE_CONVERSION_HASH:
+		priv->sym_type_conversion_hash = g_value_get_pointer (value);
+		break;
+	case PROP_SDB_PROJECT_ROOT:
+		g_free (priv->project_root);
+		priv->project_root = g_value_dup_string (value);
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+	}
+}
+
+static void
+sdb_query_result_get_property (GObject *object, guint prop_id,
+                               GValue *value, GParamSpec *pspec)
+{
+	SymbolDBQueryResultPriv *priv;
+
+	g_return_if_fail (SYMBOL_DB_IS_QUERY_RESULT (object));
+	priv = SYMBOL_DB_QUERY_RESULT (object)->priv;
+	
+	switch (prop_id)
+	{
+	case PROP_SDB_DATA_ITER:
+		g_value_set_object (value, priv->iter);
+		break;
+	case PROP_SDB_SYM_TYPE_CONVERSION_HASH:
+		g_value_set_pointer (value, (gpointer) priv->sym_type_conversion_hash);
+		break;
+	case PROP_SDB_PROJECT_ROOT:
+		g_value_set_string (value, priv->project_root);
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+	}
+}
+
+static void
+sdb_query_result_class_init (SymbolDBQueryResultClass *klass)
+{
+	GObjectClass* object_class = G_OBJECT_CLASS (klass);
+
+	g_type_class_add_private (klass, sizeof (SymbolDBQueryResultPriv));
+	object_class->set_property = sdb_query_result_set_property;
+	object_class->get_property = sdb_query_result_get_property;
+	object_class->finalize = sdb_query_result_finalize;
+
+	g_object_class_install_property
+		(object_class, PROP_SDB_COLUMNS,
+		 g_param_spec_pointer ("fields-order",
+		                      "Fields order",
+		                      "List of data fields in the order found in data model terminated by end field",
+		                      G_PARAM_CONSTRUCT_ONLY));
+	g_object_class_install_property
+		(object_class, PROP_SDB_DATA_MODEL,
+		 g_param_spec_object ("data-model",
+		                      "a GdaDataModel",
+		                      "GdaDataModel of the result set",
+		                      GDA_TYPE_DATA_MODEL,
+		                      G_PARAM_CONSTRUCT_ONLY));
+	g_object_class_install_property
+		(object_class, PROP_SDB_DATA_ITER,
+		 g_param_spec_object ("data-iter",
+		                      "a GdaDataModelIter",
+		                      "GdaDataModelIter on the result set",
+		                      GDA_TYPE_DATA_MODEL_ITER,
+		                      G_PARAM_READABLE));
+	g_object_class_install_property
+		(object_class, PROP_SDB_SYM_TYPE_CONVERSION_HASH,
+		 g_param_spec_pointer ("sym-type-conversion-hash",
+		                       "Symbol type conversoin hash table",
+		                       "A hash table to convert string form of symbol type to enum value (fixme)",
+		                       G_PARAM_READABLE | G_PARAM_WRITABLE |
+		                       G_PARAM_CONSTRUCT));
+	g_object_class_install_property
+		(object_class, PROP_SDB_PROJECT_ROOT,
+		 g_param_spec_string ("project-root",
+		                      "Project root directory",
+		                      "The project root directory",
+		                      NULL,
+		                      G_PARAM_READABLE | G_PARAM_WRITABLE |
+		                      G_PARAM_CONSTRUCT));
+}
+
+/* IAnjutaSymbol implementation */
+static gboolean
+isymbol_get_boolean (IAnjutaSymbol *isymbol, IAnjutaSymbolField field,
+                     GError **err)
+{
+	SymbolDBQueryResult *result;
+	const GValue *val;
+	gint col;
+
+	g_return_val_if_fail (SYMBOL_DB_IS_QUERY_RESULT (isymbol), FALSE);
+
+	result = SYMBOL_DB_QUERY_RESULT (isymbol);
+	if (!sdb_query_result_validate_field (result, field, err)) return FALSE;
+	
+	col = result->priv->col_map[FIELD_INDEX(field)];
+	val = gda_data_model_iter_get_value_at (result->priv->iter, col);
+	return g_value_get_boolean (val);
+}
+
+static gboolean
+isymbol_get_int (IAnjutaSymbol *isymbol, IAnjutaSymbolField field,
+                 GError **err)
+{
+	SymbolDBQueryResult *result;
+	const GValue *val;
+	gint col;
+	
+	g_return_val_if_fail (SYMBOL_DB_IS_QUERY_RESULT (isymbol), -1);
+
+	result = SYMBOL_DB_QUERY_RESULT (isymbol);
+	if (!sdb_query_result_validate_field (result, field, err)) return FALSE;
+
+	col = result->priv->col_map[FIELD_INDEX(field)];
+	val = gda_data_model_iter_get_value_at (result->priv->iter, col);
+	if (field & IANJUTA_SYMBOL_FIELD_TYPE)
+	{
+		const gchar* type_str = g_value_get_string (val);
+		return (gint)g_hash_table_lookup ((GHashTable*)result->priv->sym_type_conversion_hash, 
+		                                  type_str);
+	}
+	return g_value_get_int (val);
+}
+
+static const gchar*
+isymbol_get_string (IAnjutaSymbol *isymbol, IAnjutaSymbolField field,
+                    GError **err)
+{
+	SymbolDBQueryResult *result;
+	const GValue *val;
+	gint col;
+
+	g_return_val_if_fail (SYMBOL_DB_IS_QUERY_RESULT (isymbol), NULL);
+
+	result = SYMBOL_DB_QUERY_RESULT (isymbol);
+	if (!sdb_query_result_validate_field (result, field, err)) return FALSE;
+
+	col = result->priv->col_map[FIELD_INDEX(field)];
+	val = gda_data_model_iter_get_value_at (result->priv->iter, col);
+	return (const gchar*) g_value_get_string (val);
+}
+
+static IAnjutaSymbolType 
+isymbol_get_sym_type (IAnjutaSymbol *isymbol, GError **err)
+{
+	return (IAnjutaSymbolType)isymbol_get_int (isymbol, IANJUTA_SYMBOL_FIELD_TYPE, err);
+}
+
+static GFile*
+isymbol_get_file (IAnjutaSymbol *isymbol, GError **err)
+{
+	SymbolDBQueryResult *result;
+	const gchar* file_path;
+
+	g_return_val_if_fail (SYMBOL_DB_IS_QUERY_RESULT (isymbol), NULL);
+
+	result = SYMBOL_DB_QUERY_RESULT (isymbol);
+	
+	file_path = isymbol_get_string (isymbol, IANJUTA_SYMBOL_FIELD_FILE_PATH, err);
+	if (!file_path)
+		return NULL;
+	
+	return g_file_new_for_path (file_path);
+}
+
+static const GdkPixbuf*
+isymbol_get_icon (IAnjutaSymbol *isymbol, GError **err)
+{
+	return symbol_db_util_get_pixbuf
+		(isymbol_get_string (isymbol, IANJUTA_SYMBOL_FIELD_TYPE, NULL),
+		 isymbol_get_string (isymbol, IANJUTA_SYMBOL_FIELD_ACCESS, NULL));
+}
+
+static void
+isymbol_iface_init (IAnjutaSymbolIface *iface)
+{
+	iface->get_boolean = isymbol_get_boolean;
+	iface->get_int = isymbol_get_int;
+	iface->get_string = isymbol_get_string;
+	iface->get_sym_type = isymbol_get_sym_type;
+	iface->get_file = isymbol_get_file;
+	iface->get_icon = isymbol_get_icon;
+}
+
+/* IAnjutaIterable implementation */
+
+static gboolean
+isymbol_iter_first (IAnjutaIterable *iterable, GError **err)
+{
+	SymbolDBQueryResult *result;
+
+	g_return_val_if_fail (SYMBOL_DB_IS_QUERY_RESULT (iterable), FALSE);
+	result = SYMBOL_DB_QUERY_RESULT (iterable);	
+	return gda_data_model_iter_move_to_row (result->priv->iter, 0);
+}
+
+static gboolean
+isymbol_iter_next (IAnjutaIterable *iterable, GError **err)
+{
+	SymbolDBQueryResult *result;
+
+	g_return_val_if_fail (SYMBOL_DB_IS_QUERY_RESULT (iterable), FALSE);
+	result = SYMBOL_DB_QUERY_RESULT (iterable);	
+	return gda_data_model_iter_move_next (result->priv->iter);
+}
+
+static gboolean
+isymbol_iter_previous (IAnjutaIterable *iterable, GError **err)
+{
+	SymbolDBQueryResult *result;
+
+	g_return_val_if_fail (SYMBOL_DB_IS_QUERY_RESULT (iterable), FALSE);
+	result = SYMBOL_DB_QUERY_RESULT (iterable);	
+	return gda_data_model_iter_move_prev (result->priv->iter);
+}
+
+static gboolean
+isymbol_iter_last (IAnjutaIterable *iterable, GError **err)
+{
+	GdaDataModel *data_model;
+	gint len;
+	SymbolDBQueryResult *result;
+
+	g_return_val_if_fail (SYMBOL_DB_IS_QUERY_RESULT (iterable), FALSE);
+	result = SYMBOL_DB_QUERY_RESULT (iterable);	
+	g_object_get (G_OBJECT (result->priv->iter), "data-model", &data_model, NULL);
+	len = gda_data_model_get_n_rows (data_model);
+	g_object_unref (data_model);
+	if (len <= 0)
+		return FALSE;
+	return gda_data_model_iter_move_to_row (result->priv->iter, len - 1);
+}
+
+static void
+isymbol_iter_foreach (IAnjutaIterable *iterable, GFunc callback,
+					  gpointer user_data, GError **err)
+{
+	gint current;
+	SymbolDBQueryResult *result;
+
+	g_return_if_fail (SYMBOL_DB_IS_QUERY_RESULT (iterable));
+	result = SYMBOL_DB_QUERY_RESULT (iterable);
+	current = gda_data_model_iter_get_row (result->priv->iter);
+	if (!gda_data_model_iter_move_to_row (result->priv->iter, 0))
+		return;
+	do
+	{
+		callback (iterable, user_data);
+	}
+	while (gda_data_model_iter_move_next (result->priv->iter));
+	gda_data_model_iter_move_to_row (result->priv->iter, current);
+}
+
+static gboolean
+isymbol_iter_set_position (IAnjutaIterable *iterable,
+						   gint position, GError **err)
+{
+	SymbolDBQueryResult *result;
+
+	g_return_val_if_fail (SYMBOL_DB_IS_QUERY_RESULT (iterable), FALSE);
+	result = SYMBOL_DB_QUERY_RESULT (iterable);	
+	return gda_data_model_iter_move_to_row (result->priv->iter, position);
+}
+
+static gint
+isymbol_iter_get_position (IAnjutaIterable *iterable, GError **err)
+{
+	SymbolDBQueryResult *result;
+
+	g_return_val_if_fail (SYMBOL_DB_IS_QUERY_RESULT (iterable), FALSE);
+	result = SYMBOL_DB_QUERY_RESULT (iterable);	
+	return gda_data_model_iter_get_row (result->priv->iter);
+}
+
+static gint
+isymbol_iter_get_length (IAnjutaIterable *iterable, GError **err)
+{
+	GdaDataModel *data_model;
+	gint len;
+	SymbolDBQueryResult *result;
+
+	g_return_val_if_fail (SYMBOL_DB_IS_QUERY_RESULT (iterable), FALSE);
+	result = SYMBOL_DB_QUERY_RESULT (iterable);	
+	g_object_get (G_OBJECT (result->priv->iter), "data-model", &data_model, NULL);
+	len = gda_data_model_get_n_rows (data_model);
+	g_object_unref (data_model);
+	return len;
+}
+
+static IAnjutaIterable *
+isymbol_iter_clone (IAnjutaIterable *iter, GError **e)
+{
+	DEBUG_PRINT ("%s", "isymbol_iter_clone  () UNIMPLEMENTED");
+	return NULL;
+}
+
+static void
+isymbol_iter_assign (IAnjutaIterable *iter, IAnjutaIterable *src_iter, GError **e)
+{
+	DEBUG_PRINT ("%s", "isymbol_iter_assign () UNIMPLEMENTED");
+}
+
+static void
+isymbol_iter_iface_init (IAnjutaIterableIface *iface, GError **err)
+{
+	iface->first = isymbol_iter_first;
+	iface->next = isymbol_iter_next;
+	iface->previous = isymbol_iter_previous;
+	iface->last = isymbol_iter_last;
+	iface->foreach = isymbol_iter_foreach;
+	iface->set_position = isymbol_iter_set_position;
+	iface->get_position = isymbol_iter_get_position;
+	iface->get_length = isymbol_iter_get_length;
+	iface->clone = isymbol_iter_clone;
+	iface->assign = isymbol_iter_assign;	
+}
+
+SymbolDBQueryResult*
+symbol_db_query_result_new (GdaDataModel *data_model,
+                            IAnjutaSymbolField *fields_order,
+                            const GHashTable *sym_type_conversion_hash,
+                            const gchar *project_root_dir)
+{
+	return g_object_new (SYMBOL_DB_TYPE_QUERY_RESULT,
+	                     "data-model", data_model,
+	                     "fields-order", fields_order,
+	                     "sym-type-conversion-hash", sym_type_conversion_hash,
+	                     "project-root", project_root_dir,
+	                     NULL);
+}
+
+ANJUTA_TYPE_BEGIN (SymbolDBQueryResult, sdb_query_result, SYMBOL_DB_TYPE_QUERY_RESULT);
+ANJUTA_TYPE_ADD_INTERFACE (isymbol, IANJUTA_TYPE_SYMBOL);
+ANJUTA_TYPE_ADD_INTERFACE (isymbol_iter, IANJUTA_TYPE_ITERABLE);
+ANJUTA_TYPE_END;
diff --git a/plugins/symbol-db/symbol-db-query-result.h b/plugins/symbol-db/symbol-db-query-result.h
new file mode 100644
index 0000000..1fe1286
--- /dev/null
+++ b/plugins/symbol-db/symbol-db-query-result.h
@@ -0,0 +1,66 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
+/*
+ * anjuta
+ * Copyright (C) Naba Kumar 2010 <naba gnome org>
+ * 
+ * anjuta is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * anjuta is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SYMBOL_DB_QUERY_RESULT_H_
+#define _SYMBOL_DB_QUERY_RESULT_H_
+
+#include <glib.h>
+#include <glib-object.h>
+#include <libgda/gda-data-model.h>
+
+G_BEGIN_DECLS
+
+#define SYMBOL_DB_TYPE_QUERY_RESULT             (sdb_query_result_get_type ())
+#define SYMBOL_DB_QUERY_RESULT(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), SYMBOL_DB_TYPE_QUERY_RESULT, SymbolDBQueryResult))
+#define SYMBOL_DB_QUERY_RESULT_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), SYMBOL_DB_TYPE_QUERY_RESULT, SymbolDBQueryResultClass))
+#define SYMBOL_DB_IS_QUERY_RESULT(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SYMBOL_DB_TYPE_QUERY_RESULT))
+#define SYMBOL_DB_IS_QUERY_RESULT_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), SYMBOL_DB_TYPE_QUERY_RESULT))
+#define SYMBOL_DB_QUERY_RESULT_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), SYMBOL_DB_TYPE_QUERY_RESULT, SymbolDBQueryResultClass))
+#define SYMBOL_DB_QUERY_RESULT_ERROR            (symbol_db_query_result_error_quark ())
+
+typedef struct _SymbolDBQueryResultClass SymbolDBQueryResultClass;
+typedef struct _SymbolDBQueryResult SymbolDBQueryResult;
+typedef struct _SymbolDBQueryResultPriv SymbolDBQueryResultPriv;
+
+typedef enum {
+	SYMBOL_DB_QUERY_RESULT_ERROR_INVALID_FIELD,
+	SYMBOL_DB_QUERY_RESULT_ERROR_FIELD_NOT_PRESENT
+} SymbolDBQueryResultError;
+
+struct _SymbolDBQueryResultClass
+{
+	GObjectClass parent_class;
+};
+
+struct _SymbolDBQueryResult
+{
+	GObject parent_instance;
+	SymbolDBQueryResultPriv *priv;
+};
+
+GQuark symbol_db_query_result_error_quark (void);
+GType sdb_query_result_get_type (void) G_GNUC_CONST;
+SymbolDBQueryResult* symbol_db_query_result_new (GdaDataModel *data_model,
+                                                 IAnjutaSymbolField *fields_order,
+                                                 const GHashTable *sym_type_conversion_hash,
+                                                 const gchar *project_root_dir);
+
+G_END_DECLS
+
+#endif /* _SYMBOL_DB_QUERY_RESULT_H_ */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]