Index: trunk/src/libgrbs/collision.c =================================================================== --- trunk/src/libgrbs/collision.c (revision 1316) +++ trunk/src/libgrbs/collision.c (revision 1317) @@ -26,14 +26,15 @@ return 0; } -static void coll_report(grbs_t *grbs, grbs_2net_t *tn, grbs_2net_t *coll_tn) +static void coll_report(grbs_t *grbs, grbs_2net_t *tn, grbs_2net_t *coll_tn, grbs_arc_t *coll_arc) { -#warning TODO: callback: use ->coll_report + if (grbs->coll_report_cb != NULL) + grbs->coll_report_cb(grbs, tn, coll_tn, coll_arc); } static void coll_report_arc(grbs_t *grbs, grbs_2net_t *tn, grbs_arc_t *coll_arc) { - coll_report(grbs, tn, grbs_arc_parent_2net(coll_arc)); + coll_report(grbs, tn, grbs_arc_parent_2net(coll_arc), coll_arc); } Index: trunk/src/libgrbs/grbs.h =================================================================== --- trunk/src/libgrbs/grbs.h (revision 1316) +++ trunk/src/libgrbs/grbs.h (revision 1317) @@ -81,6 +81,9 @@ struct grbs_s { long uids; + /* user settable callbacks (optional) */ + void (*coll_report_cb)(grbs_t *grbs, grbs_2net_t *tn, grbs_2net_t *coll_tn, grbs_arc_t *coll_arc); /* rounting tn happened to collide with coll_tn; if coll_arc is not NULL, the collision happened at that arc */ + /* keep track on all objects so they can be freed or quickly reallocated */ gdl_list_t all_2nets, free_2nets; gdl_list_t all_points, free_points;