cru_subconnector - general graph production rule for the cru library
#include <cru/cru.h>
typedef void (*cru_subconnector)
(
int,
cru_edge
,
cru_vertex
,
int *)
A user-defined function cast to this type takes four parameters in this order:
The cru_edge and cru_vertex types are aliases to void pointers, which may refer to any type chosen by the application developer. The function must treat the edge label and the vertex as read-only.
Similarly to a cru_connector function, the subconnector builds a graph incrementally by passing a newly created edge label and adjacent vertex to cru_connect for each outgoing edge from the given vertex. Redundant identical vertices created by subconnector functions are automatically pruned and if a destructor is given, also reclaimed.
Unlike a connector function, a subconnector is called once for each combination of incident edge label and vertex, hence more than once on any vertex reached through multiple distinctly labeled edges. The subconnector function is allowed to create outgoing edge labels and adjacent vertices that depend arbitrarily on the incident edge label as well as the vertex.
When there are multiple calls involving the same vertex, the resulting set of outgoing edges installed from that vertex is the union of all outgoing edges created across the calls (that is, with duplicate edges pruned).
If a subconnector function sets the error code to any non-zero value, the instance of cru_built that calls it terminates without building a graph and propagates the same error code to its caller.
Applications can report POSIX error codes or define special purpose codes, but should not redefine any that clash with those reserved by cru as declared in the error_codes.h header file.
Subonnector functions are referenced by the subconnector field in a cru_builder structure passed to the cru_built API function. This field has no default value.
/usr/local/include/cru/function_types.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_merger, 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_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