cru_bop - binary operator function type used in the cru library
#include <cru/cru.h>
typedef void* (*cru_bop)(void *, void *, int *)
A user-defined binary operator takes a pair of 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.
Binary operators serve various purposes, such as constructing a new vertex from a pair of vertices, a new edge label from a pair of edge labels, or constructing more general results when used as the reduction operator in a cru_fold structure. See the NOTES section below for details.
The return value may be either a scalar value or a pointer to the heap depending on the application's representation for it. 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.
If a binary 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.
Applications pass binary operators to cru as pointers through
Conditional binary operators are used as the postponement field in a cru_postponer and the e_prod field in a cru_crosser, which are passed respectively to the cru_postponed and cru_crossed API functions.
/usr/local/include/cru/function_types.h
/usr/local/include/cru/data_types.h
/usr/local/include/cru/error_codes.h
cru, 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_tpred, cru_united, cru_uop, cru_vertex_count, cru_zone
Dennis Furey (milonga@delayinsensitive.com)
https://github.com/gueststar/cru