cru_postponer - specification for selectively serializing edges
#include <cru/cru.h>
typedef struct
cru_postponer_s
{
int
po_fix;
cru_tpred
postponable;
struct
cru_cbop_s
postponement;
} *cru_postponer;
This structure parameterizes the cru_postponed library function with necessary information initialized by the application to transplant some of the edges in a graph to the termini of their sibling edges with possible modifications.
Each edge in a given graph is tested for being postponable according to user-defined criteria by the ternary predicate referenced through the postponable field. Given the edge's origin as its left operand, the edge's label as its middle operand, and the edge's terminus as its right operand, the predicate is expected to return a non-zero value only for the postponable edges. From that point, the computation proceeds as follows.
For these purposes, edges that originate and terminate at the same vertex are ignored. Two further options are available.
If the postponable field is omitted or NULL, then the cru_postponed function reports an error of CRU_UNDPOP for an undefined postponable predicate.
It is an error for the binary operator to create edge labels of a type that can not be reclaimed by the same destructor as those already present in the graph. This error is not detected but will cause memory leaks or worse.
/usr/local/include/cru/data_types.h
/usr/local/include/cru/error_codes.h
cru, cru_bop, cru_bpred, cru_builder, cru_built, cru_cbop, cru_classifier, cru_class_of, cru_class_size, cru_composed, cru_composer, cru_connect, cru_connector, cru_cqop, cru_crossed, cru_crosser, cru_ctop, cru_ctop_pair, cru_ctop_quad, cru_data_types, cru_deduplicated, cru_destructor, cru_destructor_pair, cru_edge_count, cru_fabricated, cru_fabricator, cru_filter, cru_filtered, cru_fold, cru_free_kill_switch, cru_free_later, cru_free_now, cru_free_partition, cru_function_types, cru_get, cru_hash, cru_induced, cru_inducer, cru_kernel, cru_kill, cru_killed, cru_mapreduced, cru_mapreducer, cru_merged, cru_merger, cru_mutated, cru_mutator, cru_new_kill_switch, cru_nop, cru_order, cru_order_pair, cru_partition_of, cru_plan, cru_postponed, cru_prop, cru_prop_pair, cru_pruner, cru_qop, cru_qpred, cru_set, cru_sig, cru_singleton, cru_split, cru_splitter, cru_spread, cru_strerror, cru_stretch, cru_stretched, cru_stretcher, cru_subconnector, cru_terminus_count, cru_top, cru_tpred, cru_united, cru_uop, cru_vertex_count, cru_zone
Dennis Furey (milonga@delayinsensitive.com)
https://github.com/gueststar/cru