gboolean tm_workspace_update(TMWorkObject *workspace, gboolean force , gboolean recurse, gboolean __unused__ update_parent) { guint i; gboolean update_tags = force; #ifdef TM_DEBUG g_message("Updating workspace"); #endif if (workspace != TM_WORK_OBJECT(theWorkspace)) return FALSE; if (NULL == theWorkspace) return TRUE; if ((recurse) && (theWorkspace->work_objects)) { for (i=0; i < theWorkspace->work_objects->len; ++i) { if (TRUE == tm_work_object_update(TM_WORK_OBJECT( theWorkspace->work_objects->pdata[i]), FALSE, TRUE, FALSE)) update_tags = TRUE; } } if (update_tags) tm_workspace_recreate_tags_array(); /* workspace->analyze_time = time(NULL); */ return update_tags; }
void tm_source_file_destroy(TMSourceFile *source_file) { #ifdef TM_DEBUG g_message("Destroying source file: %s", source_file->work_object.file_name); #endif if (NULL != TM_WORK_OBJECT(source_file)->tags_array) { tm_tags_array_free(TM_WORK_OBJECT(source_file)->tags_array, TRUE); TM_WORK_OBJECT(source_file)->tags_array = NULL; } tm_work_object_destroy(&(source_file->work_object)); }
gboolean tm_source_file_init(TMSourceFile *source_file, const char *file_name , gboolean update, const char* name) { if (0 == source_file_class_id) source_file_class_id = tm_work_object_register(tm_source_file_free , tm_source_file_update, NULL); #ifdef TM_DEBUG g_message("Source File init: %s", file_name); #endif if (FALSE == tm_work_object_init(&(source_file->work_object), source_file_class_id, file_name, FALSE)) return FALSE; source_file->inactive = FALSE; if (NULL == LanguageTable) { initializeParsing(); installLanguageMapDefaults(); if (NULL == TagEntryFunction) TagEntryFunction = tm_source_file_tags; if (NULL == TagEntrySetArglistFunction) TagEntrySetArglistFunction = tm_source_file_set_tag_arglist; } if (name == NULL) source_file->lang = LANG_AUTO; else source_file->lang = getNamedLanguage(name); if (update) tm_source_file_update(TM_WORK_OBJECT(source_file), TRUE, FALSE, FALSE); return TRUE; }
void tm_workspace_free(gpointer workspace) { guint i; if (workspace != theWorkspace) return; #ifdef TM_DEBUG g_message("Workspace destroyed"); #endif if (theWorkspace) { if (theWorkspace->work_objects) { for (i=0; i < theWorkspace->work_objects->len; ++i) tm_work_object_free(theWorkspace->work_objects->pdata[i]); g_ptr_array_free(theWorkspace->work_objects, TRUE); } if (theWorkspace->global_tags) { for (i=0; i < theWorkspace->global_tags->len; ++i) tm_tag_unref(theWorkspace->global_tags->pdata[i]); g_ptr_array_free(theWorkspace->global_tags, TRUE); } tm_work_object_destroy(TM_WORK_OBJECT(theWorkspace)); g_free(theWorkspace); theWorkspace = NULL; } }
TMWorkObject *tm_workspace_find_object(TMWorkObject *work_object, const char *file_name , gboolean name_only) { TMWorkObject *w = NULL; guint i; if (work_object != TM_WORK_OBJECT(theWorkspace)) return NULL; if ((NULL == theWorkspace) || (NULL == theWorkspace->work_objects) || (0 == theWorkspace->work_objects->len)) return NULL; for (i = 0; i < theWorkspace->work_objects->len; ++i) { if (NULL != (w = tm_work_object_find(TM_WORK_OBJECT(theWorkspace->work_objects->pdata[i]) , file_name, name_only))) return w; } return NULL; }
gboolean tm_workspace_add_object(TMWorkObject *work_object) { /* theWorkspace should already have been created otherwise something went wrong */ if (NULL == theWorkspace) return FALSE; if (NULL == theWorkspace->work_objects) theWorkspace->work_objects = g_ptr_array_new(); g_ptr_array_add(theWorkspace->work_objects, work_object); work_object->parent = TM_WORK_OBJECT(theWorkspace); return TRUE; }
void tm_workspace_dump(void) { if (theWorkspace) { #ifdef TM_DEBUG g_message("Dumping TagManager workspace tree.."); #endif tm_work_object_dump(TM_WORK_OBJECT(theWorkspace)); if (theWorkspace->work_objects) { guint i; for (i=0; i < theWorkspace->work_objects->len; ++i) { if (IS_TM_PROJECT(TM_WORK_OBJECT(theWorkspace->work_objects->pdata[i]))) tm_project_dump(TM_PROJECT(theWorkspace->work_objects->pdata[i])); else tm_work_object_dump(TM_WORK_OBJECT(theWorkspace->work_objects->pdata[i])); } } } }
static gboolean tm_create_workspace(void) { workspace_class_id = tm_work_object_register(tm_workspace_free, tm_workspace_update , tm_workspace_find_object); theWorkspace = g_new(TMWorkspace, 1); if (FALSE == tm_work_object_init(TM_WORK_OBJECT(theWorkspace), workspace_class_id, NULL, TRUE)) { g_free(theWorkspace); theWorkspace = NULL; g_warning("Failed to initialize workspace"); return FALSE; } theWorkspace->global_tags = NULL; theWorkspace->work_objects = NULL; return TRUE; }
void tm_workspace_recreate_tags_array(void) { guint i, j; TMWorkObject *w; TMTagAttrType sort_attrs[] = { tm_tag_attr_name_t, tm_tag_attr_file_t , tm_tag_attr_scope_t, tm_tag_attr_type_t, tm_tag_attr_arglist_t, 0}; #ifdef TM_DEBUG g_message("Recreating workspace tags array"); #endif if ((NULL == theWorkspace) || (NULL == theWorkspace->work_objects)) return; if (NULL != theWorkspace->work_object.tags_array) g_ptr_array_set_size(theWorkspace->work_object.tags_array, 0); else theWorkspace->work_object.tags_array = g_ptr_array_new(); #ifdef TM_DEBUG g_message("Total %d objects", theWorkspace->work_objects->len); #endif for (i=0; i < theWorkspace->work_objects->len; ++i) { w = TM_WORK_OBJECT(theWorkspace->work_objects->pdata[i]); #ifdef TM_DEBUG g_message("Adding tags of %s", w->file_name); #endif if ((NULL != w) && (NULL != w->tags_array) && (w->tags_array->len > 0)) { for (j = 0; j < w->tags_array->len; ++j) { g_ptr_array_add(theWorkspace->work_object.tags_array, w->tags_array->pdata[j]); } } } #ifdef TM_DEBUG g_message("Total: %d tags", theWorkspace->work_object.tags_array->len); #endif tm_tags_sort(theWorkspace->work_object.tags_array, sort_attrs, TRUE); }
gboolean tm_workspace_remove_object(TMWorkObject *w, gboolean do_free, gboolean update) { guint i; if ((NULL == theWorkspace) || (NULL == theWorkspace->work_objects) || (NULL == w)) return FALSE; for (i=0; i < theWorkspace->work_objects->len; ++i) { if (theWorkspace->work_objects->pdata[i] == w) { if (do_free) tm_work_object_free(w); g_ptr_array_remove_index_fast(theWorkspace->work_objects, i); if (update) tm_workspace_update(TM_WORK_OBJECT(theWorkspace), TRUE, FALSE, FALSE); return TRUE; } } return FALSE; }