CRU_SUBCONNECTOR (7)
CRU MANUAL
CRU_SUBCONNECTOR (7)

NAME

cru_subconnector - general graph production rule for the cru library

SYNOPSIS

#include <cru/cru.h>

typedef void (*cru_subconnector) (
   int,
   cru_edge ,
   cru_vertex ,
   int *)

DESCRIPTION

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).

ERRORS

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.

NOTES

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.

FILES

/usr/local/include/cru/function_types.h

/usr/local/include/cru/data_types.h

/usr/local/include/cru/error_codes.h

SEE ALSO

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

AUTHOR

Dennis Furey (milonga@delayinsensitive.com)

PROJECT PAGE

https://github.com/gueststar/cru

CRU VERSION 0.15.3
October 05, 2024
CRU_SUBCONNECTOR (7)