CRU_TOP (7)
CRU MANUAL
CRU_TOP (7)

NAME

cru_top - ternary operator function type used in the cru library

SYNOPSIS

#include <cru/cru.h>

typedef void* (*cru_top)(void *, void *, void *, int *)

DESCRIPTION

A user-defined ternary operator takes three operands and a pointer to an initially zero error code as arguments. The operands can be scalar values, pointers to heap allocated storage, or a combination. The operator must treat the operands as read only but may assign the error code.

Applications use ternary operators to tell cru API functions how to compute some value determined by a vertex or an edge and its immediate environment.

RETURN VALUE

The return value may be either a scalar value or a pointer to the heap at the option of the application developer. In the case of a pointer, the result ordinarily refers 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 ternary operator 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 operators are passed to cru API functions not directly but by pointers to them in the fields of base structures built into derived structures then built into the top level structures that are passed via the API. One such field is the map in a cru_fold structure and the other is top field of a cru_ctop (conditional ternary operator) structure. Regarding the operand interpretations mentioned above, the middle operand is a vertex only when the operator is the map field of a cru_fold used as the vertex field of a cru_prop. In any other context, it is an edge label.

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