anjuta r4475 - in trunk: . plugins/symbol-db



Author: mcora
Date: Sat Dec 20 17:52:33 2008
New Revision: 4475
URL: http://svn.gnome.org/viewvc/anjuta?rev=4475&view=rev

Log:
	* plugins/symbol-db/symbol-db-engine-priv.h:
	I forgot to add this file.

Added:
   trunk/plugins/symbol-db/symbol-db-engine-priv.h
Modified:
   trunk/ChangeLog

Added: trunk/plugins/symbol-db/symbol-db-engine-priv.h
==============================================================================
--- (empty file)
+++ trunk/plugins/symbol-db/symbol-db-engine-priv.h	Sat Dec 20 17:52:33 2008
@@ -0,0 +1,286 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
+/*
+ * anjuta
+ * Copyright (C) Massimo Cora' 2007-2008 <maxcvs email it>
+ * 
+ * anjuta is free software.
+ * 
+ * You may redistribute it and/or modify it under the terms of the
+ * GNU General Public License, as published by the Free Software
+ * Foundation; either version 2 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 anjuta.  If not, write to:
+ * 	The Free Software Foundation, Inc.,
+ * 	51 Franklin Street, Fifth Floor
+ * 	Boston, MA  02110-1301, USA.
+ */
+
+#ifndef _SYMBOL_DB_ENGINE_PRIV_H_
+#define _SYMBOL_DB_ENGINE_PRIV_H_
+
+#include <glib-object.h>
+#include <glib.h>
+#include <libanjuta/anjuta-launcher.h>
+
+/* file should be specified without the ".db" extension. */
+#define ANJUTA_DB_FILE	".anjuta_sym_db"
+
+#define TABLES_SQL	PACKAGE_DATA_DIR"/tables.sql"
+
+#define CTAGS_MARKER	"#_#\n"
+
+#define SHARED_MEMORY_PREFIX		"/dev/shm"
+
+#define THREADS_MONITOR_TIMEOUT			50
+#define THREADS_MAX_CONCURRENT			7
+#define TRIGGER_SIGNALS_DELAY			100
+#define	TRIGGER_MAX_CLOSURE_RETRIES		50
+#define	THREAD_MAX_CLOSURE_RETRIES		20
+
+#define MEMORY_POOL_STRING_SIZE			100
+#define MEMORY_POOL_INT_SIZE			100
+
+
+#define USE_ASYNC_QUEUE
+#undef USE_ASYNC_QUEUE
+
+
+#ifdef USE_ASYNC_QUEUE
+#define MP_LEND_OBJ_STR(sdb_priv, OUT_gvalue) \
+		OUT_gvalue = (GValue*)g_async_queue_pop(sdb_priv->mem_pool_string); \
+		DEBUG_PRINT ("lend str %p, qlength %d [-]", OUT_gvalue, g_async_queue_length (sdb_priv->mem_pool_string));
+
+#define MP_RETURN_OBJ_STR(sdb_priv, gvalue) \
+	g_async_queue_push(sdb_priv->mem_pool_string, gvalue); \
+	DEBUG_PRINT ("return str %p, qlength %d [+]", gvalue, g_async_queue_length (sdb_priv->mem_pool_string));
+
+#define MP_LEND_OBJ_INT(sdb_priv, OUT_gvalue) \
+		OUT_gvalue = (GValue*)g_async_queue_pop(sdb_priv->mem_pool_int); \
+		DEBUG_PRINT ("lend int, qlength %d [-]", g_async_queue_length (sdb_priv->mem_pool_int));
+
+#define MP_RETURN_OBJ_INT(sdb_priv, gvalue) \
+	g_async_queue_push(sdb_priv->mem_pool_int, gvalue); \
+	DEBUG_PRINT ("return int, qlength %d [+]", g_async_queue_length (sdb_priv->mem_pool_int));
+#else
+#define MP_LEND_OBJ_STR(sdb_priv, OUT_gvalue) \
+		OUT_gvalue = (GValue*)g_queue_pop_head(sdb_priv->mem_pool_string); 
+
+#define MP_RETURN_OBJ_STR(sdb_priv, gvalue) \
+	g_queue_push_head(sdb_priv->mem_pool_string, gvalue); 
+
+#define MP_LEND_OBJ_INT(sdb_priv, OUT_gvalue) \
+		OUT_gvalue = (GValue*)g_queue_pop_head(sdb_priv->mem_pool_int); 
+
+#define MP_RETURN_OBJ_INT(sdb_priv, gvalue) \
+	g_queue_push_head(sdb_priv->mem_pool_int, gvalue);
+#endif
+
+#define MP_SET_HOLDER_BATCH_STR(priv, param, string_, ret_bool, ret_value) { \
+	GValue *value_str; \
+	MP_LEND_OBJ_STR(priv, value_str); \
+	g_value_set_static_string (value_str, string_); \
+	ret_value = gda_holder_take_static_value (param, value_str, &ret_bool, NULL); \
+	if (ret_value != NULL && G_VALUE_HOLDS_STRING (ret_value) == TRUE) \
+	{ \
+		MP_RETURN_OBJ_STR(priv, ret_value); \
+	} \
+}
+
+#define MP_SET_HOLDER_BATCH_INT(priv, param, int_, ret_bool, ret_value) { \
+	GValue *value_int; \
+	MP_LEND_OBJ_INT(priv, value_int); \
+	g_value_set_int (value_int, int_); \
+	ret_value = gda_holder_take_static_value (param, value_int, &ret_bool, NULL); \
+	if (ret_value != NULL && G_VALUE_HOLDS_INT (ret_value) == TRUE) \
+	{ \
+		MP_RETURN_OBJ_INT(priv, ret_value); \
+	} \
+}
+
+
+typedef enum
+{
+	PREP_QUERY_WORKSPACE_NEW = 0,
+	PREP_QUERY_GET_WORKSPACE_ID_BY_UNIQUE_NAME,
+	PREP_QUERY_PROJECT_NEW,
+	PREP_QUERY_GET_PROJECT_ID_BY_UNIQUE_NAME,
+	PREP_QUERY_UPDATE_PROJECT_ANALYSE_TIME,
+	PREP_QUERY_FILE_NEW,
+	PREP_QUERY_GET_FILE_ID_BY_UNIQUE_NAME,
+	PREP_QUERY_GET_ALL_FROM_FILE_BY_PROJECT_NAME,
+	PREP_QUERY_GET_ALL_FROM_FILE_BY_PROJECT_ID,
+	PREP_QUERY_UPDATE_FILE_ANALYSE_TIME,
+	PREP_QUERY_GET_ALL_FROM_FILE_WHERE_NOT_IN_SYMBOLS,
+	PREP_QUERY_LANGUAGE_NEW,
+	PREP_QUERY_GET_LANGUAGE_ID_BY_UNIQUE_NAME,
+	PREP_QUERY_SYM_TYPE_NEW,
+	PREP_QUERY_GET_SYM_TYPE_ID,	
+	PREP_QUERY_SYM_KIND_NEW,
+	PREP_QUERY_GET_SYM_KIND_BY_UNIQUE_NAME,
+	PREP_QUERY_SYM_ACCESS_NEW,
+	PREP_QUERY_GET_SYM_ACCESS_BY_UNIQUE_NAME,
+	PREP_QUERY_SYM_IMPLEMENTATION_NEW,
+	PREP_QUERY_GET_SYM_IMPLEMENTATION_BY_UNIQUE_NAME,
+	PREP_QUERY_HERITAGE_NEW,
+	PREP_QUERY_SCOPE_NEW,
+	PREP_QUERY_GET_SCOPE_ID,
+	PREP_QUERY_GET_PARENT_SCOPE_ID_BY_SYMBOL_ID_NO_FILE,
+	PREP_QUERY_GET_PARENT_SCOPE_ID_BY_SYMBOL_ID,
+	PREP_QUERY_GET_PARENT_SCOPE_ID_BY_SYMBOL_ID_BY_SYMBOL_ID,
+	PREP_QUERY_GET_SCOPE_DEFINITION_ID_BY_WALK_DOWN_SCOPE_PATH,
+	PREP_QUERY_TMP_HERITAGE_NEW,
+	PREP_QUERY_GET_ALL_FROM_TMP_HERITAGE,
+	PREP_QUERY_GET_ALL_FROM_TMP_HERITAGE_WITH_INHERITS,
+	PREP_QUERY_TMP_HERITAGE_DELETE_ALL,
+	PREP_QUERY_SYMBOL_NEW,
+	PREP_QUERY_GET_SYMBOL_SCOPE_DEFINITION_ID,
+	PREP_QUERY_GET_SYMBOL_ID_BY_CLASS_NAME,
+	PREP_QUERY_GET_SYMBOL_ID_BY_CLASS_NAME_AND_NAMESPACE,
+	PREP_QUERY_UPDATE_SYMBOL_SCOPE_ID,
+	PREP_QUERY_UPDATE_SYMBOL_SCOPE_ID_MIXED,
+	PREP_QUERY_GET_SYMBOL_ID_BY_UNIQUE_INDEX_KEY,
+	PREP_QUERY_GET_SYMBOL_ID_BY_UNIQUE_INDEX_KEY_EXT,
+	PREP_QUERY_GET_SYMBOL_ID_BY_UNIQUE_INDEX_KEY_EXT2,
+	PREP_QUERY_UPDATE_SYMBOL_ALL,
+	PREP_QUERY_REMOVE_NON_UPDATED_SYMBOLS,
+	PREP_QUERY_RESET_UPDATE_FLAG_SYMBOLS,
+	PREP_QUERY_GET_REMOVED_IDS,
+	PREP_QUERY_TMP_REMOVED_DELETE_ALL,
+	PREP_QUERY_COUNT
+		
+} static_query_type;
+
+typedef struct _static_query_node
+{
+	static_query_type query_id;
+	const gchar *query_str;
+	GdaStatement *stmt;
+	GdaSet *plist;
+
+} static_query_node;
+
+typedef enum {
+	DYN_PREP_QUERY_GET_CLASS_PARENTS = 0,
+	DYN_PREP_QUERY_GET_CLASS_PARENTS_BY_SYMBOL_ID,
+	DYN_PREP_QUERY_GET_GLOBAL_MEMBERS_FILTERED,
+	DYN_PREP_QUERY_GET_SCOPE_MEMBERS,
+	DYN_PREP_QUERY_GET_CURRENT_SCOPE,
+	DYN_PREP_QUERY_GET_FILE_SYMBOLS,
+	DYN_PREP_QUERY_GET_SYMBOL_INFO_BY_ID,
+	DYN_PREP_QUERY_FIND_SYMBOL_NAME_BY_PATTERN,
+	DYN_PREP_QUERY_FIND_SYMBOL_BY_NAME_PATTERN_FILTERED,
+	DYN_PREP_QUERY_GET_SCOPE_MEMBERS_BY_SYMBOL_ID,
+	DYN_PREP_QUERY_GET_SCOPE_MEMBERS_BY_SYMBOL_ID_FILTERED,
+	DYN_PREP_QUERY_GET_FILES_FOR_PROJECT,
+	DYN_PREP_QUERY_COUNT
+		
+} dyn_query_type;
+
+/**
+ * dyn_query_node's possible structures
+ *
+ *           sym_extra_info_gtree          with has_gtree_child = FALSE
+ *                   |
+ *       ... +-------+-------+ ...
+ *           |       |       |    <========  keys = sym_info
+ *         CDQN    CDQN    CDQN              values = ChildDynQueryNode
+ *
+ *
+ *
+ *           sym_extra_info_gtree          with has_gtree_child = TRUE
+ *                   |
+ *       ... +-------+-------+ ...
+ *           |       |       |    <========  keys = sym_info, values = GTree
+ *         GTree    GTree   GTree            
+ *         / | \     |       |    <========  keys = other_parameters, values = ChildDynQueryNode
+ *        /  |  \   ...     ...   
+ *     CDQN CDQN CDQN
+ *
+ *
+ */
+typedef struct _dyn_query_node {
+	dyn_query_type dyn_query_id;
+	GTree * sym_extra_info_gtree;
+	gboolean has_gtree_child;
+	
+} dyn_query_node;
+
+typedef struct _ChildDynQueryNode {
+	gchar *query_str;
+	GdaStatement *stmt;
+	GdaSet *plist;	
+	
+} DynChildQueryNode;
+
+
+/* the SymbolDBEngine Private structure */
+struct _SymbolDBEnginePriv
+{
+	gchar *ctags_path;
+	
+	GdaConnection *db_connection;
+	GdaSqlParser *sql_parser;
+	gchar *db_directory;
+	gchar *project_directory;
+
+	gint scan_process_id;
+	GAsyncQueue *scan_process_id_queue;
+	
+	GAsyncQueue *scan_queue;	
+	GAsyncQueue *updated_symbols_id;
+	GAsyncQueue *updated_scope_symbols_id;
+	GAsyncQueue *inserted_symbols_id;
+	
+	gchar *shared_mem_str;
+	FILE *shared_mem_file;
+	gint shared_mem_fd;
+	AnjutaLauncher *ctags_launcher;
+	GList *removed_launchers;
+	gboolean scanning_status;
+	gboolean shutting_down;
+	GMutex *shutting_mutex;
+	GCond *shutting_cond;
+	
+	GMutex* mutex;
+	GAsyncQueue* signals_queue;
+	GQueue* thread_list_data;
+	
+	gboolean thread_status;
+	gint concurrent_threads;
+	
+	gint thread_monitor_handler;	
+	gint timeout_trigger_handler;
+	
+	gint trigger_closure_retries;
+	gint thread_closure_retries;
+	
+	GHashTable *sym_type_conversion_hash;
+	GHashTable *garbage_shared_mem_files;
+	
+	/* Caches */
+	GHashTable *kind_cache;
+	GHashTable *access_cache;
+	GHashTable *implementation_cache;	
+	
+	GTree *file_symbols_cache;
+	
+	static_query_node *static_query_list[PREP_QUERY_COUNT]; 
+	dyn_query_node *dyn_query_list[DYN_PREP_QUERY_COUNT];
+	
+#ifdef USE_ASYNC_QUEUE	
+	GAsyncQueue *mem_pool_string;
+	GAsyncQueue *mem_pool_int;
+#else
+	GQueue *mem_pool_string;
+	GQueue *mem_pool_int;
+#endif
+};
+
+#endif



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