CRU_QOP (7)
CRU MANUAL
CRU_QOP (7)

NAME

cru_qop - quaternary operator function type used in the cru library

SYNOPSIS

#include <cru/cru.h>

typedef void* (*cru_qop)(void *, void *, void *, void *, int *)

DESCRIPTION

A user-defined quaternary operator constructs the labels of newly created edges during composition operations performed by the cru_composed API function, which connects a vertex to those that are adjacent to its adjacent vertices. The quartenary operator is called once for every combination of pairs of end-to-end edges in the graph passed to cru_composed. The label constructed during an invocation can depend in general on

The four operands to the quarternary operator correspond to these entities in this order, and can be scalar values, pointers to heap allocated storage, or a combination depending on the application's way of representing a graph and its properties. The last parameter is a pointer to an error code initially zero on entry. The operator must treat the operands as read only but may assign the error code.

RETURN VALUE

The return value is expected to be the label for a new edge to be created in the graph. The new edge connects the vertex whose property is given in the first operand to the terminus of the edge whose label is given in the last operand.

The created edge label must be of the same type as the input edge labels. If the result is a pointer to the heap, it refers ordinarily to newly allocated storage. However, applications may opt to return a pointer to shared storage provided the operator and the corresponding cru_destructor function implement thread-safe reference counting.

ERRORS

If a quaternary operator sets the error code to any non-zero value, the cru_composed function invoking it reclaims the graph passed to it, returns an empty 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

Quartenary operators are passed via pointers to them in the qop field in a cru_cqop (conditional quarternary operator) structure, which is built into the labeler field in a cru_composer structure passed to cru_composed. The vertex properties contributing to the operator's input are computed according to the local and adjacent props defined in the co_props field of the cru_composer. Each vertex can have two properties, one given by each prop, and the appropriate property is selected depending on its role as the local or the adjacent vertex in any given invocation.

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_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_QOP (7)