CRU_HASH (7)
CRU MANUAL
CRU_HASH (7)

NAME

cru_hash - hash functions used by the cru library

SYNOPSIS

#include <cru/cru.h>

typedef uintptr_t (*cru_hash)(void *)

DESCRIPTION

A user-defined hash function cast to this type takes a scalar value or the address of a user-defined data structure as an argument and returns a pointer-sized result value. The argument could represent a vertex in a graph, an edge label, or a vertex property depending on the context. The hash function must treat it as read-only. Applications may define a distinct hash function for each type of operand. See the NOTES for details.

RETURN VALUE

The result returned by a hash can be generated in any arbitrary way, but it must be identical across multiple calls on identical or equivalent arguments.

NOTES

Hash functions are called frequently by cru during various operations and are a potential hotspot.

Other things being equal, hash functions that map similar arguments to very dissimilar result values are preferable for performance reasons. That is, hash functions should be chosen that map small or "low entropy" inputs to well mixed results not following any simple pattern. A badly chosen hash function can adversely affect load balancing.

Hash functions are passed to cru via pointers in the hash field of a cru_order structure.

Where it is possible for cru to infer that a hash function's operand type is a scalar value due to the absence of any destructor declared for it, applications can assign a NULL value to the hash field to request the use of a default hash function. The default hash function may change in future releases of cru due to occasional improvements in the state of the art. There is by design no explicit access to it via the supported API. Applications should treat it as unpredictable or risk being broken by an update.

FILES

/usr/local/include/cru/function_types.h

/usr/local/include/cru/data_types.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_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

AUTHOR

Dennis Furey (milonga@delayinsensitive.com)

PROJECT PAGE

https://github.com/gueststar/cru

CRU VERSION 0.15.3
October 05, 2024
CRU_HASH (7)