29 #include "qofclass-p.h"
33 static GHashTable *classTable = NULL;
34 static GHashTable *sortTable = NULL;
35 static gboolean initialized = FALSE;
38 clear_table (gpointer key __attribute__ ((unused)), gpointer value,
39 gpointer user_data __attribute__ ((unused)))
41 g_hash_table_destroy (value);
54 PERR (
"You must call qof_class_init() before using qof_class.");
65 classTable = g_hash_table_new (g_str_hash, g_str_equal);
66 sortTable = g_hash_table_new (g_str_hash, g_str_equal);
70 qof_class_shutdown (
void)
76 g_hash_table_foreach_remove (classTable, clear_table, NULL);
77 g_hash_table_destroy (classTable);
78 g_hash_table_destroy (sortTable);
86 return g_hash_table_lookup (sortTable, obj_name);
104 if (default_sort_function)
106 g_hash_table_insert (sortTable, (gchar *) obj_name,
107 default_sort_function);
110 ht = g_hash_table_lookup (classTable, obj_name);
115 ht = g_hash_table_new (g_str_hash, g_str_equal);
116 g_hash_table_insert (classTable, (gchar *) obj_name, ht);
125 for (i = 0; params[i].param_name; i++)
126 g_hash_table_insert (ht,
127 (
char *) params[i].param_name, (gpointer) & (params[i]));
139 if (g_hash_table_lookup (classTable, obj_name))
150 g_return_val_if_fail (obj_name, NULL);
151 g_return_val_if_fail (parameter, NULL);
155 ht = g_hash_table_lookup (classTable, obj_name);
158 PWARN (
"no object of type %s", obj_name);
162 return (g_hash_table_lookup (ht, parameter));
167 const gchar *parameter)
171 g_return_val_if_fail (obj_name, NULL);
172 g_return_val_if_fail (parameter, NULL);
176 return prm->param_getfcn;
183 const gchar *parameter)
187 g_return_val_if_fail (obj_name, NULL);
188 g_return_val_if_fail (parameter, NULL);
192 return prm->param_setfcn;
199 const gchar *param_name)
203 if (!obj_name || !param_name)
210 return (prm->param_type);
222 class_foreach_cb (gpointer key __attribute__ ((unused)),
223 gpointer item __attribute__ ((unused)),
226 struct class_iterate *qiter = arg;
229 qiter->fcn (
id, qiter->data);
235 struct class_iterate qiter;
243 qiter.data = user_data;
245 g_hash_table_foreach (classTable, class_foreach_cb, &qiter);
257 param_foreach_cb (gpointer key __attribute__ ((unused)),
258 gpointer item, gpointer arg)
260 struct parm_iterate *qiter = arg;
263 qiter->fcn (parm, qiter->data);
270 struct parm_iterate qiter;
271 GHashTable *param_ht;
273 if (!obj_name || !cb)
277 param_ht = g_hash_table_lookup (classTable, obj_name);
282 qiter.data = user_data;
284 g_hash_table_foreach (param_ht, param_foreach_cb, &qiter);
287 struct param_ref_list
293 find_reference_param_cb (
QofParam * param, gpointer user_data)
295 struct param_ref_list *b;
297 b = (
struct param_ref_list *) user_data;
298 if ((param->param_getfcn == NULL) || (param->param_setfcn == NULL))
300 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_STRING))
302 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_NUMERIC))
304 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_TIME))
306 #ifndef QOF_DISABLE_DEPRECATED
310 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_CHAR))
312 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_DEBCRED))
314 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_GUID))
316 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_INT32))
318 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_INT64))
320 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_DOUBLE))
322 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_KVP))
324 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_BOOLEAN))
326 if (0 ==
safe_strcmp (param->param_type, QOF_ID_BOOK))
328 b->list = g_list_append (b->list, param);
335 struct param_ref_list b;
340 ref_list = g_list_copy (b.list);