CRU_CONNECTOR (7)
CRU MANUAL
CRU_CONNECTOR (7)

NAME

cru_connector - simple graph production rule used by the cru library

SYNOPSIS

#include <cru/cru.h>

typedef void (*cru_connector) (
   cru_vertex ,
   int *)

DESCRIPTION

A user-defined function cast to this type takes a vertex belonging to a graph under construction and a pointer to an initially zero integer error code as arguments. The cru_vertex type is an alias for a void pointer, which may refer to any type chosen by the application developer. The function must treat the vertex as read-only but may assign the error code.

The function is expected to call cru_connect exactly once for each outgoing edge from the given vertex, creating and passing an edge label and an adjacent vertex to cru_connect on each call. In so doing, the function incrementally builds the graph by requesting inclusion of the newly created adjacent vertex and edge.

Adjacent vertices created in this way are passed in subsequent calls to the same connector function unless they have been created previously. If multiple worker threads attempt to create the same adjacent vertex (due to it being reachable through multiple paths) only one call to the connector function is ever made for it and redundant copies of the vertex are automatically reclaimed if a destructor is provided for them.

ERRORS

If a connector 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

Connector functions are referenced by the connector field in a cru_builder structure passed to the cru_built library 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_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_subconnector, 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_CONNECTOR (7)