CRU_TPRED (7)
CRU MANUAL
CRU_TPRED (7)

NAME

cru_tpred - ternary predicate type used in the cru library

SYNOPSIS

#include <cru/cru.h>

typedef int (*cru_tpred)(void *, cru_edge, void *, int *)

DESCRIPTION

User-defined ternary predicates taking three operands are called to make decisions when any of the cru_split, cru_stretched, or cru_postponed functions executes. The middle operand is the label of an edge and the first and last operands are user-defined properties of the vertices at its local and remote ends respectively. The cru_edge type is an alias for a void pointer, to which the application can cast any compatible type.

The operands can be scalar values, pointers to heap allocated storage, or a combination depending on how the application represents graph edges and properties. The last parameter is a pointer to an initally zero error code. The predicate must treat the operands as read-only but may assign the error code.

RETURN VALUE

If the ternary operator called during a stretch returns a non-zero value, it requests the deletion of the edge from the graph whose edge was passed to it.

A ternary predicate called during a split operation returns a non-zero value to request creation of an edge.

A ternary predicate called during a postponement operation returns a non-zero value to indicate that the given edge is a candidate for postponement.

ERRORS

If a ternary predicate sets the error code to any non-zero value, the cru API function invoking it terminates early without completing, 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

Ternary predicates are passed by pointers to them either in the tpred field of a cru_ctop (conditional ternary operator) structure, in the expander field of a cru_stretcher structure, or in the postponable field of a cru_postponer structure. Conditional ternary operators form the cru_ctop_pair structures built into the sp_ctops field of a cru_splitter used in splitting operations.

The vertex properties passed to the ternary operator during a stretch are computed according to the cru_prop in the st_prop field of the cru_stretcher structure, and during a split according to the sp_prop in the cru_splitter structure.

A ternary predicate and a ternary operator both referenced via the same cru_ctop structure are passed the same operands and therefore should have identical operand types.

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_subconnector, cru_terminus_count, cru_top, 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_TPRED (7)