cru_destructor_pair - graph reclamation specification
#include <cru/cru.h>
typedef struct
cru_destructor_pair_s
{
cru_destructor
v_free;
cru_destructor
e_free;
} *cru_destructor_pair;
This structure encapsulates the information needed for reclaiming or releasing the memory used by a graph. Large graphs might use considerable memory, so reclaiming them is important when they are no longer needed and the memory is needed for other purposes.
Because the edge labels and the vertices in a graph may be of different types dependent on the application, two seperate user-defined destructor functions can be specified. The v_free field is for the vertex destructor, and the e_free field is for the edge label destructor.
Applications have the option of initializing either or both of these fields as pointers to functions, or of making either or both fields NULL. Any functions referenced must follow the usual calling conventions for cru_destructor functions.
A NULL value assigned to either of these fields at the time a graph is built tells cru that the corresponding vertices or edge labels in the graph are scalar values rather than pointers, hence never in need of reclamation. This condition may enable other inferences, such as the use of default equality relations and hash functions.
It is an error to omit the destructors for dynamically allocated vertices or edges because doing so causes memory leaks and possibly other anomalies. There is no way for cru to detect this error.
The cru_destructor_pair structure is part of the cru_sig structure, which is part of the cru_builder, cru_fabricator, and cru_crosser top level structures. Inferences about relations and hash functions based on the lack of a corresponding destructor apply to the cru_order in the same cru_sig.
/usr/local/include/cru/function_types.h
/usr/local/include/cru/data_types.h
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_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