Add explicit callback types for readability. (#16820)
vkalintiris committed
Jan 24, 2024 at 12:14 UTC
eec55449d1f64eca6bfe9a075d2a619617ab7857
2 files changed
+39
-33
libnetdata/dictionary/dictionary.c
+26
-26
@@ -115,17 +115,17 @@ struct dictionary_hooks {
115
REFCOUNT links;
116
usec_t last_master_deletion_us;
117
118
- void (*ins_callback)(const DICTIONARY_ITEM *item, void *value, void *data);
119
- void *ins_callback_data;
118
+ dict_cb_insert_t insert_callback;
119
+ void *insert_callback_data;
120
121
- bool (*conflict_callback)(const DICTIONARY_ITEM *item, void *old_value, void *new_value, void *data);
121
+ dict_cb_conflict_t conflict_callback;
122
void *conflict_callback_data;
123
124
- void (*react_callback)(const DICTIONARY_ITEM *item, void *value, void *data);
124
+ dict_cb_react_t react_callback;
125
void *react_callback_data;
126
127
- void (*del_callback)(const DICTIONARY_ITEM *item, void *value, void *data);
128
- void *del_callback_data;
127
+ dict_cb_delete_t delete_callback;
128
+ void *delelte_callback_data;
129
};
130
131
struct dictionary_stats dictionary_stats_category_other = {
@@ -305,16 +305,16 @@ static inline size_t dictionary_hooks_free(DICTIONARY *dict) {
305
return 0;
306
}
307
308
-void dictionary_register_insert_callback(DICTIONARY *dict, void (*ins_callback)(const DICTIONARY_ITEM *item, void *value, void *data), void *data) {
308
+void dictionary_register_insert_callback(DICTIONARY *dict, dict_cb_insert_t insert_callback, void *data) {
309
if(unlikely(is_view_dictionary(dict)))
310
fatal("DICTIONARY: called %s() on a view.", __FUNCTION__ );
311
312
dictionary_hooks_allocate(dict);
313
- dict->hooks->ins_callback = ins_callback;
314
- dict->hooks->ins_callback_data = data;
313
+ dict->hooks->insert_callback = insert_callback;
314
+ dict->hooks->insert_callback_data = data;
315
}
316
317
-void dictionary_register_conflict_callback(DICTIONARY *dict, bool (*conflict_callback)(const DICTIONARY_ITEM *item, void *old_value, void *new_value, void *data), void *data) {
317
+void dictionary_register_conflict_callback(DICTIONARY *dict, dict_cb_conflict_t conflict_callback, void *data) {
318
if(unlikely(is_view_dictionary(dict)))
319
fatal("DICTIONARY: called %s() on a view.", __FUNCTION__ );
320
@@ -326,7 +326,7 @@ void dictionary_register_conflict_callback(DICTIONARY *dict, bool (*conflict_cal
326
dict->hooks->conflict_callback_data = data;
327
}
328
329
-void dictionary_register_react_callback(DICTIONARY *dict, void (*react_callback)(const DICTIONARY_ITEM *item, void *value, void *data), void *data) {
329
+void dictionary_register_react_callback(DICTIONARY *dict, dict_cb_react_t react_callback, void *data) {
330
if(unlikely(is_view_dictionary(dict)))
331
fatal("DICTIONARY: called %s() on a view.", __FUNCTION__ );
332
@@ -335,13 +335,13 @@ void dictionary_register_react_callback(DICTIONARY *dict, void (*react_callback)
335
dict->hooks->react_callback_data = data;
336
}
337
338
-void dictionary_register_delete_callback(DICTIONARY *dict, void (*del_callback)(const DICTIONARY_ITEM *item, void *value, void *data), void *data) {
338
+void dictionary_register_delete_callback(DICTIONARY *dict, dict_cb_delete_t delete_callback, void *data) {
339
if(unlikely(is_view_dictionary(dict)))
340
fatal("DICTIONARY: called %s() on a view.", __FUNCTION__ );
341
342
dictionary_hooks_allocate(dict);
343
- dict->hooks->del_callback = del_callback;
344
- dict->hooks->del_callback_data = data;
343
+ dict->hooks->delete_callback = delete_callback;
344
+ dict->hooks->delelte_callback_data = data;
345
}
346
347
// ----------------------------------------------------------------------------
@@ -591,7 +591,7 @@ static inline REFCOUNT DICTIONARY_ITEM_REFCOUNT_GET_SOLE(DICTIONARY_ITEM *item)
591
// callbacks execution
592
593
static void dictionary_execute_insert_callback(DICTIONARY *dict, DICTIONARY_ITEM *item, void *constructor_data) {
594
- if(likely(!dict->hooks || !dict->hooks->ins_callback))
594
+ if(likely(!dict->hooks || !dict->hooks->insert_callback))
595
return;
596
597
if(unlikely(is_view_dictionary(dict)))
@@ -604,7 +604,7 @@ static void dictionary_execute_insert_callback(DICTIONARY *dict, DICTIONARY_ITEM
604
dict->creation_line,
605
dict->creation_file);
606
607
- dict->hooks->ins_callback(item, item->shared->value, constructor_data?constructor_data:dict->hooks->ins_callback_data);
607
+ dict->hooks->insert_callback(item, item->shared->value, constructor_data?constructor_data:dict->hooks->insert_callback_data);
608
DICTIONARY_STATS_CALLBACK_INSERTS_PLUS1(dict);
609
}
610
@@ -652,7 +652,7 @@ static void dictionary_execute_react_callback(DICTIONARY *dict, DICTIONARY_ITEM
652
}
653
654
static void dictionary_execute_delete_callback(DICTIONARY *dict, DICTIONARY_ITEM *item) {
655
- if(likely(!dict->hooks || !dict->hooks->del_callback))
655
+ if(likely(!dict->hooks || !dict->hooks->delete_callback))
656
return;
657
658
// We may execute delete callback on items deleted from a view,
@@ -666,7 +666,7 @@ static void dictionary_execute_delete_callback(DICTIONARY *dict, DICTIONARY_ITEM
666
dict->creation_line,
667
dict->creation_file);
668
669
- dict->hooks->del_callback(item, item->shared->value, dict->hooks->del_callback_data);
669
+ dict->hooks->delete_callback(item, item->shared->value, dict->hooks->delelte_callback_data);
670
671
DICTIONARY_STATS_CALLBACK_DELETES_PLUS1(dict);
672
}
@@ -2450,8 +2450,8 @@ void dictionary_foreach_done(DICTFE *dfe) {
2450
// The dictionary is locked for reading while this happens
2451
// do not use other dictionary calls while walking the dictionary - deadlock!
2452
2453
-int dictionary_walkthrough_rw(DICTIONARY *dict, char rw, int (*callback)(const DICTIONARY_ITEM *item, void *entry, void *data), void *data) {
2454
- if(unlikely(!dict || !callback)) return 0;
2453
+int dictionary_walkthrough_rw(DICTIONARY *dict, char rw, dict_walkthrough_callback_t walkthrough_callback, void *data) {
2454
+ if(unlikely(!dict || !walkthrough_callback)) return 0;
2455
2456
if(unlikely(is_dictionary_destroyed(dict))) {
2457
internal_error(true, "DICTIONARY: attempted to dictionary_walkthrough_rw() on a destroyed dictionary");
@@ -2477,7 +2477,7 @@ int dictionary_walkthrough_rw(DICTIONARY *dict, char rw, int (*callback)(const D
2477
if(unlikely(rw == DICTIONARY_LOCK_REENTRANT))
2478
ll_recursive_unlock(dict, rw);
2479
2480
- int r = callback(item, item->shared->value, data);
2480
+ int r = walkthrough_callback(item, item->shared->value, data);
2481
2482
if(unlikely(rw == DICTIONARY_LOCK_REENTRANT))
2483
ll_recursive_lock(dict, rw);
@@ -2513,8 +2513,8 @@ static int dictionary_sort_compar(const void *item1, const void *item2) {
2513
return strcmp(item_get_name((*(DICTIONARY_ITEM **)item1)), item_get_name((*(DICTIONARY_ITEM **)item2)));
2514
}
2515
2516
-int dictionary_sorted_walkthrough_rw(DICTIONARY *dict, char rw, int (*callback)(const DICTIONARY_ITEM *item, void *entry, void *data), void *data, dictionary_sorted_compar compar) {
2517
- if(unlikely(!dict || !callback)) return 0;
2516
+int dictionary_sorted_walkthrough_rw(DICTIONARY *dict, char rw, dict_walkthrough_callback_t walkthrough_callback, void *data, dict_item_comparator_t item_comparator) {
2517
+ if(unlikely(!dict || !walkthrough_callback)) return 0;
2518
2519
if(unlikely(is_dictionary_destroyed(dict))) {
2520
internal_error(true, "DICTIONARY: attempted to dictionary_sorted_walkthrough_rw() on a destroyed dictionary");
@@ -2538,8 +2538,8 @@ int dictionary_sorted_walkthrough_rw(DICTIONARY *dict, char rw, int (*callback)(
2538
if(unlikely(i != entries))
2539
entries = i;
2540
2541
- if(compar)
2542
- qsort(array, entries, sizeof(DICTIONARY_ITEM *), (qsort_compar)compar);
2541
+ if(item_comparator)
2542
+ qsort(array, entries, sizeof(DICTIONARY_ITEM *), (qsort_compar) item_comparator);
2543
else
2544
qsort(array, entries, sizeof(DICTIONARY_ITEM *), dictionary_sort_compar);
2545
@@ -2549,7 +2549,7 @@ int dictionary_sorted_walkthrough_rw(DICTIONARY *dict, char rw, int (*callback)(
2549
item = array[i];
2550
2551
if(callit)
2552
- r = callback(item, item->shared->value, data);
2552
+ r = walkthrough_callback(item, item->shared->value, data);
2553
2554
dict_item_release_and_check_if_it_is_deleted_and_can_be_removed_under_this_lock_mode(dict, item, rw);
2555
// item_release(dict, item);
libnetdata/dictionary/dictionary.h
+13
-7
@@ -130,22 +130,26 @@ DICTIONARY *dictionary_create_view(DICTIONARY *master);
130
131
// an insert callback to be called just after an item is added to the dictionary
132
// this callback is called while the dictionary is write locked!
133
-void dictionary_register_insert_callback(DICTIONARY *dict, void (*ins_callback)(const DICTIONARY_ITEM *item, void *value, void *data), void *data);
133
+typedef void (*dict_cb_insert_t)(const DICTIONARY_ITEM *item, void *value, void *data);
134
+void dictionary_register_insert_callback(DICTIONARY *dict, dict_cb_insert_t insert_callback, void *data);
135
136
// a delete callback to be called just before an item is deleted forever
137
// this callback is called while the dictionary is write locked!
137
-void dictionary_register_delete_callback(DICTIONARY *dict, void (*del_callback)(const DICTIONARY_ITEM *item, void *value, void *data), void *data);
138
+typedef void (*dict_cb_delete_t)(const DICTIONARY_ITEM *item, void *value, void *data);
139
+void dictionary_register_delete_callback(DICTIONARY *dict, dict_cb_delete_t delete_callback, void *data);
140
141
// a merge callback to be called when DICT_OPTION_DONT_OVERWRITE_VALUE
142
// and an item is already found in the dictionary - the dictionary does nothing else in this case
143
// the old_value will remain in the dictionary - the new_value is ignored
144
// The callback should return true if the value has been updated (it increases the dictionary version).
143
-void dictionary_register_conflict_callback(DICTIONARY *dict, bool (*conflict_callback)(const DICTIONARY_ITEM *item, void *old_value, void *new_value, void *data), void *data);
145
+typedef bool (*dict_cb_conflict_t)(const DICTIONARY_ITEM *item, void *old_value, void *new_value, void *data);
146
+void dictionary_register_conflict_callback(DICTIONARY *dict, dict_cb_conflict_t conflict_callback, void *data);
147
148
// a reaction callback to be called after every item insertion or conflict
149
// after the constructors have finished and the items are fully available for use
150
// and the dictionary is not write locked anymore
148
-void dictionary_register_react_callback(DICTIONARY *dict, void (*react_callback)(const DICTIONARY_ITEM *item, void *value, void *data), void *data);
151
+typedef void (*dict_cb_react_t)(const DICTIONARY_ITEM *item, void *value, void *data);
152
+void dictionary_register_react_callback(DICTIONARY *dict, dict_cb_react_t react_callback, void *data);
153
154
// Destroy a dictionary
155
// Returns the number of bytes freed
@@ -236,15 +240,17 @@ size_t dictionary_acquired_item_references(DICT_ITEM_CONST DICTIONARY_ITEM *item
240
// You cannot alter the dictionary from inside a dictionary_walkthrough_read() - deadlock!
241
// You can only delete the current item from inside a dictionary_walkthrough_write() - you can add as many as you want.
242
//
243
+typedef int (*dict_walkthrough_callback_t)(const DICTIONARY_ITEM *item, void *value, void *data);
244
+
245
#define dictionary_walkthrough_read(dict, callback, data) dictionary_walkthrough_rw(dict, 'r', callback, data)
246
#define dictionary_walkthrough_write(dict, callback, data) dictionary_walkthrough_rw(dict, 'w', callback, data)
241
-int dictionary_walkthrough_rw(DICTIONARY *dict, char rw, int (*callback)(const DICTIONARY_ITEM *item, void *value, void *data), void *data);
247
+int dictionary_walkthrough_rw(DICTIONARY *dict, char rw, dict_walkthrough_callback_t walkthrough_callback, void *data);
248
243
-typedef int (*dictionary_sorted_compar)(const DICTIONARY_ITEM **item1, const DICTIONARY_ITEM **item2);
249
+typedef int (*dict_item_comparator_t)(const DICTIONARY_ITEM **item1, const DICTIONARY_ITEM **item2);
250
251
#define dictionary_sorted_walkthrough_read(dict, callback, data) dictionary_sorted_walkthrough_rw(dict, 'r', callback, data, NULL)
252
#define dictionary_sorted_walkthrough_write(dict, callback, data) dictionary_sorted_walkthrough_rw(dict, 'w', callback, data, NULL)
247
-int dictionary_sorted_walkthrough_rw(DICTIONARY *dict, char rw, int (*callback)(const DICTIONARY_ITEM *item, void *entry, void *data), void *data, dictionary_sorted_compar compar);
253
+int dictionary_sorted_walkthrough_rw(DICTIONARY *dict, char rw, dict_walkthrough_callback_t walkthrough_callback, void *data, dict_item_comparator_t item_comparator_callback);
254
255
// ----------------------------------------------------------------------------
256
// Traverse with foreach