30 #include "qofclass-p.h" 34 static GHashTable *classTable = NULL;
35 static GHashTable *sortTable = NULL;
36 static gboolean initialized = FALSE;
39 clear_table (gpointer key __attribute__ ((unused)), gpointer value,
40 gpointer user_data __attribute__ ((unused)))
42 g_hash_table_destroy (value);
55 PERR (
"You must call qof_class_init() before using qof_class.");
66 classTable = g_hash_table_new (g_str_hash, g_str_equal);
67 sortTable = g_hash_table_new (g_str_hash, g_str_equal);
71 qof_class_shutdown (
void)
77 g_hash_table_foreach_remove (classTable, clear_table, NULL);
78 g_hash_table_destroy (classTable);
79 g_hash_table_destroy (sortTable);
87 return g_hash_table_lookup (sortTable, obj_name);
105 if (default_sort_function)
107 g_hash_table_insert (sortTable, (gchar *) obj_name,
108 default_sort_function);
111 ht = g_hash_table_lookup (classTable, obj_name);
116 ht = g_hash_table_new (g_str_hash, g_str_equal);
117 g_hash_table_insert (classTable, (gchar *) obj_name, ht);
126 for (i = 0; params[i].param_name; i++)
127 g_hash_table_insert (ht,
128 (
char *) params[i].param_name, (gpointer) & (params[i]));
140 if (g_hash_table_lookup (classTable, obj_name))
151 g_return_val_if_fail (obj_name, NULL);
152 g_return_val_if_fail (parameter, NULL);
156 ht = g_hash_table_lookup (classTable, obj_name);
159 PWARN (
"no object of type %s", obj_name);
163 return (g_hash_table_lookup (ht, parameter));
168 const gchar *parameter)
172 g_return_val_if_fail (obj_name, NULL);
173 g_return_val_if_fail (parameter, NULL);
177 return prm->param_getfcn;
184 const gchar *parameter)
188 g_return_val_if_fail (obj_name, NULL);
189 g_return_val_if_fail (parameter, NULL);
193 return prm->param_setfcn;
200 const gchar *param_name)
204 if (!obj_name || !param_name)
211 return (prm->param_type);
223 class_foreach_cb (gpointer key __attribute__ ((unused)),
224 gpointer item __attribute__ ((unused)),
227 struct class_iterate *qiter = arg;
230 qiter->fcn (
id, qiter->data);
236 struct class_iterate qiter;
244 qiter.data = user_data;
246 g_hash_table_foreach (classTable, class_foreach_cb, &qiter);
258 param_foreach_cb (gpointer key __attribute__ ((unused)),
259 gpointer item, gpointer arg)
261 struct parm_iterate *qiter = arg;
264 qiter->fcn (parm, qiter->data);
271 struct parm_iterate qiter;
272 GHashTable *param_ht;
274 if (!obj_name || !cb)
278 param_ht = g_hash_table_lookup (classTable, obj_name);
283 qiter.data = user_data;
285 g_hash_table_foreach (param_ht, param_foreach_cb, &qiter);
288 struct param_ref_list
294 find_reference_param_cb (
QofParam * param, gpointer user_data)
296 struct param_ref_list *b;
298 b = (
struct param_ref_list *) user_data;
299 if ((param->param_getfcn == NULL) || (param->param_setfcn == NULL))
301 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_STRING))
303 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_NUMERIC))
305 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_TIME))
307 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_CHAR))
309 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_DEBCRED))
311 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_GUID))
313 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_INT32))
315 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_INT64))
317 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_DOUBLE))
319 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_KVP))
321 if (0 ==
safe_strcmp (param->param_type, QOF_TYPE_BOOLEAN))
323 if (0 ==
safe_strcmp (param->param_type, QOF_ID_BOOK))
325 b->list = g_list_append (b->list, param);
332 struct param_ref_list b;
337 ref_list = g_list_copy (b.list);
#define PERR(format, args...)
gboolean qof_class_is_registered(QofIdTypeConst obj_name)
void qof_class_param_foreach(QofIdTypeConst obj_name, QofParamForeachCB cb, gpointer user_data)
QofSetterFunc qof_class_get_parameter_setter(QofIdTypeConst obj_name, const gchar *parameter)
void qof_class_register(QofIdTypeConst obj_name, QofSortFunc default_sort_function, const QofParam *params)
registers a new object class with the Qof subsystem.
gint(* QofSortFunc)(gconstpointer, gconstpointer)
void(* QofClassForeachCB)(QofIdTypeConst, gpointer)
void(* QofSetterFunc)(gpointer, gpointer)
const QofParam * qof_class_get_parameter(QofIdTypeConst obj_name, const gchar *parameter)
void qof_class_foreach(QofClassForeachCB cb, gpointer user_data)
gpointer(* QofAccessFunc)(gpointer object, const QofParam *param)
GList * qof_class_get_referenceList(QofIdTypeConst type)
List of the parameters that could be references.
const gchar * QofIdTypeConst
#define PWARN(format, args...)
QofType qof_class_get_parameter_type(QofIdTypeConst obj_name, const gchar *param_name)
gint safe_strcmp(const gchar *da, const gchar *db)
QofAccessFunc qof_class_get_parameter_getter(QofIdTypeConst obj_name, const gchar *parameter)
const gchar * QofLogModule
void(* QofParamForeachCB)(QofParam *, gpointer user_data)