36 static gboolean object_is_initialized = FALSE;
37 static GList *object_modules = NULL;
38 static GList *book_list = NULL;
39 static GHashTable *backend_data = NULL;
54 return (obj->
create (book));
67 for (l = object_modules; l; l = l->next)
75 book_list = g_list_prepend (book_list, book);
80 qof_object_book_end (
QofBook * book)
87 for (l = object_modules; l; l = l->next)
95 book_list = g_list_remove (book_list, book);
100 qof_object_is_dirty (
QofBook * book)
106 for (l = object_modules; l; l = l->next)
121 qof_object_mark_clean (
QofBook * book)
127 for (l = object_modules; l; l = l->next)
147 for (l = object_modules; l; l = l->next)
150 (cb) (obj, user_data);
164 PINFO (
" Object type %s is not fully QOF compliant",
180 if (!book || !type_name)
184 PINFO (
"type=%s", type_name);
189 PERR (
"No object of type %s", type_name);
199 obj->
foreach (col, cb, user_data);
209 if (!type_name || !obj)
234 return (obj->type_label);
238 clear_table (gpointer key __attribute__ ((unused)), gpointer value,
239 gpointer user_data __attribute__ ((unused)))
241 g_hash_table_destroy (value);
248 qof_object_initialize (
void)
250 if (object_is_initialized)
252 backend_data = g_hash_table_new (g_str_hash, g_str_equal);
253 object_is_initialized = TRUE;
257 qof_object_shutdown (
void)
259 g_return_if_fail (object_is_initialized == TRUE);
261 g_hash_table_foreach_remove (backend_data, clear_table, NULL);
262 g_hash_table_destroy (backend_data);
265 g_list_free (object_modules);
266 object_modules = NULL;
267 g_list_free (book_list);
269 object_is_initialized = FALSE;
280 g_return_val_if_fail (object_is_initialized, FALSE);
287 if (g_list_index (object_modules, (gpointer)
object) == -1)
289 g_list_prepend (object_modules, (gpointer)
object);
294 if (object->book_begin && book_list)
297 for (node = book_list; node; node = node->next)
298 object->book_begin (node->data);
310 g_return_val_if_fail (object_is_initialized, NULL);
315 for (qiter = object_modules; qiter; qiter = qiter->next)
326 const gchar * backend_name, gpointer be_data)
329 g_return_val_if_fail (object_is_initialized, FALSE);
331 if (!type_name || *type_name ==
'\0' ||
332 !backend_name || *backend_name ==
'\0' || !be_data)
335 ht = g_hash_table_lookup (backend_data, backend_name);
340 ht = g_hash_table_new (g_str_hash, g_str_equal);
341 g_hash_table_insert (backend_data, (gchar *) backend_name, ht);
345 g_hash_table_insert (ht, (gchar *) type_name, be_data);
352 const gchar * backend_name)
356 if (!type_name || *type_name ==
'\0' ||
357 !backend_name || *backend_name ==
'\0')
360 ht = g_hash_table_lookup (backend_data, (gchar *) backend_name);
364 return g_hash_table_lookup (ht, (gchar *) type_name);
369 QofForeachBackendTypeCB cb;
374 foreach_backend (gpointer key, gpointer be_item, gpointer arg)
376 gchar *data_type = key;
377 struct foreach_data *cb_data = arg;
379 g_return_if_fail (key && be_item && arg);
382 (cb_data->cb) (data_type, be_item, cb_data->user_data);
386 qof_object_foreach_backend (
const gchar * backend_name,
387 QofForeachBackendTypeCB cb, gpointer user_data)
390 struct foreach_data cb_data;
392 if (!backend_name || *backend_name ==
'\0' || !cb)
395 ht = g_hash_table_lookup (backend_data, (gchar *) backend_name);
400 cb_data.user_data = user_data;
402 g_hash_table_foreach (ht, foreach_backend, &cb_data);