cru_merger - specification for simplifying a graph by equivalence
#include <cru/cru.h>
typedef struct
cru_merger_s
{
struct
cru_classifier_s
me_classifier;
struct
cru_order_pair_s
me_orders;
struct
cru_kernel_s
me_kernel;
cru_pruner
pruner;
} *cru_merger;
This structure parameterizes the cru_merged library function with necessary information initialized by the application to reduce classes of related vertices in a graph to single vertices.
The sets of edges the kernel reduces are determined by the classes of mutually related vertices, and the result of reducing a set of edges is allowed to depend on the results of reducing the classes containing the edges' origins and termini.
Some inferences are made by default when parts of this structure are NULL, omitted, or zero-filled.
It is an error to omit destructors from the kernel if the results are dynamically allocated and destructors can not be inferred from the given graph. This error is not detectable but will cause memory leaks.
The me_classifier field and the me_kernel.v_op field must be both initialized or both zero-filled, because either is useless without the other. If only one is initialized, then the cru_merged function reports an error of CRU_INCMRG, for a conflicting merge specification.
An edge order associated with a given graph is necessary for merging it, but need not be defined for the resulting graph in the me_orders field. However, the edge ordering is necessary for further merging of the result, as well as for composition, deduplication, postponement, and stretching it. If any of these operations is anticipated after merging, applications should define an edge ordering.
/usr/local/include/cru/cru.h
/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_mutated, cru_mutator, cru_new_kill_switch, cru_nop, cru_order, cru_order_pair, cru_partition_of, cru_plan, cru_postponed, cru_postponer, 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