CRU_PRUNER (7)
CRU MANUAL
CRU_PRUNER (7)

NAME

cru_pruner - context dependent edge filter used by the cru library

SYNOPSIS

#include <cru/cru.h>

typedef int (*cru_pruner)(int, cru_edge, int *)

DESCRIPTION

A user-defined function cast to this type effects optional selective deletion or "filtering" of graph edges in the course of a merging operation performed by the cru_merged API function. For each equivalence class of vertices to be merged and for each outgoing edge label observed in the class, cru calls the pruner function passing it a condition flag, the edge label, and a pointer to an initially zero error code. The cru_edge type is an alias for a void pointer, to which any pointer-sized type can be cast by the application developer. The condition flag is non-zero if and only if every vertex in the class has at least one outgoing edge labeled by the given label.

Pruner functions should treat the edge label as read-only, but may assign the error code.

RETURN VALUE

If a pruner returns any non-zero value, the graph is unaffected.

If a pruner returns zero, all outgoing edges labeled by the given label are deleted from all vertices in the equivalence class for which the pruner is called.

ERRORS

If a pruner sets the error code to any non-zero value, the cru_merge operation in progress when it is called 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

The intended use case for this feature pertains to an unusual Petri net reachability graph transformation. For filtering of edges by criteria independent of their relationship to other class members, the cru_filtered function is a better alternative.

Pruner functions are passed to cru via the pruner field of a cru_merger structure passed to the cru_merged library function. This field may be omitted or assigned NULL if the pruning step is not required.

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