/** Adds multiple source files to the workspace and updates the workspace tag arrays. This is more efficient than calling tm_workspace_add_source_file() and tm_workspace_update_source_file() separately for each of the files. @param source_files The source files to be added to the workspace. */ void tm_workspace_add_source_files(GPtrArray *source_files) { guint i; g_return_if_fail(source_files != NULL); for (i = 0; i < source_files->len; i++) { TMSourceFile *source_file = source_files->pdata[i]; tm_workspace_add_source_file_noupdate(source_file); update_source_file(source_file, NULL, 0, FALSE, FALSE); } tm_workspace_update(); }
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; }
/** Removes multiple source files from the workspace and updates the workspace tag arrays. This is more efficient than calling tm_workspace_remove_source_file() separately for each of the files. To completely free the TMSourceFile pointers call tm_source_file_free() on each of them. @param source_files The source files to be removed from the workspace. */ void tm_workspace_remove_source_files(GPtrArray *source_files) { guint i, j; g_return_if_fail(source_files != NULL); //TODO: sort both arrays by pointer value and remove in single pass for (i = 0; i < source_files->len; i++) { TMSourceFile *source_file = source_files->pdata[i]; for (j = 0; j < theWorkspace->source_files->len; j++) { if (theWorkspace->source_files->pdata[j] == source_file) { g_ptr_array_remove_index_fast(theWorkspace->source_files, j); break; } } } tm_workspace_update(); }