30#define BREAKPOINT raise (SIGUSR1)
40#define STRACE(...) do { \
42 int size = backtrace (array, 10); \
43 char **strings = backtrace_symbols (array, size); \
44 if (strings != NULL) { \
45 log_debug (__VA_ARGS__); \
46 log_debug ("[%d stack frames]", size); \
47 for (int i = 0; i < size; i++) \
48 log_debug ("%s", strings[i]); \
53#define STRACE log_debug
59#define STRACE log_debug
64#define LIKELY(x) __builtin_expect(!!(x), true)
65#define UNLIKELY(x) __builtin_expect(!!(x), false)
79#define VOLK_VERSION "1.0b12"
81#define VOLK_NS "info:volksdata:"
83#define KLEN sizeof(VOLK_Key)
84#define DBL_KLEN sizeof(VOLK_DoubleKey)
85#define TRP_KLEN sizeof(VOLK_TripleKey)
86#define QUAD_KLEN sizeof(VOLK_QuadKey)
88# define UUIDSTR_SIZE 37
92#define NULL_TRP {NULL_KEY, NULL_KEY, NULL_KEY}
131#define VOLK_NOACTION 88801
138#define VOLK_NORESULT 88802
145#define VOLK_END 88803
158#define VOLK_CONFLICT 88804
161#define VOLK_ERROR -88899
164#define VOLK_PARSE_ERR -88898
167#define VOLK_VALUE_ERR -88897
170#define VOLK_TXN_ERR -88896
173#define VOLK_DB_ERR -88895
176#define VOLK_NOT_IMPL_ERR -88894
179#define VOLK_IO_ERR -88893
182#define VOLK_MEM_ERR -88892
193#define VOLK_CONFLICT_ERR -88891
196#define VOLK_ENV_ERR -88890
213#ifndef VOLK_HASH_SEED
215#define VOLK_HASH_SEED 0
219#define VOLK_HASH32(buf, size, seed) XXH32 (buf, size, seed)
221#define VOLK_HASH64(buf, size, seed) XXH3_64bits_withSeed (buf, size, seed)
223#define VOLK_HASH128(buf, size, seed) XXH3_128bits_withSeed (buf, size, seed)
225#if INTPTR_MAX == INT64_MAX
226#define VOLK_HASH(...) VOLK_HASH64 (__VA_ARGS__)
228#define VOLK_HASH(...) VOLK_HASH32 (__VA_ARGS__)
253#if INTPTR_MAX == INT64_MAX
296#define VOLK_MIN_ERROR VOLK_ERROR
301#define VOLK_MAX_ERROR -88000
304#define VOLK_MIN_WARNING VOLK_NOACTION
310#define VOLK_MAX_WARNING 88899
320#define log_debug(...) do {} while(0)
322#define log_trace(...) do {} while(0)
331#define LOG_RC(rc) do { \
332 if ((rc) < 0) log_error (VOLK_strerror (rc)); \
333 else if ((rc) > 0) log_warn (VOLK_strerror (rc)); \
337#define CHECK(exp, marker) do { \
338 VOLK_rc _rc = (exp); \
340 if (UNLIKELY (_rc != VOLK_OK)) { \
342 "*** PREMATURE EXIT due to error: %s", \
343 VOLK_strerror (_rc)); \
350#define PCHECK(exp, marker) do { \
351 VOLK_rc _rc = (exp); \
352 if (UNLIKELY (_rc < VOLK_OK)) { \
354 "*** PREMATURE EXIT due to error: %s", \
355 VOLK_strerror (_rc)); \
363#define NLCHECK(exp, marker) do { \
364 if (UNLIKELY ((exp) == NULL)) { \
365 log_error ("*** PREMATURE EXIT due to NULL result."); \
372#define RCCK(exp) do { \
373 VOLK_rc _rc = (exp); \
374 if (UNLIKELY (_rc != VOLK_OK)) { \
376 "*** PREMATURE EXIT due to non-zero exit: %s (%d)", \
377 VOLK_strerror (_rc), _rc); \
384#define PRCCK(exp) do { \
385 VOLK_rc _rc = (exp); \
386 if (UNLIKELY (_rc < VOLK_OK)) { \
388 "*** PREMATURE EXIT due to error: %s (%d)", \
389 VOLK_strerror (_rc), _rc); \
396#define NLRCCK(exp, _rc) do { \
397 if (UNLIKELY ((exp) == NULL)) { \
398 log_error ("*** PREMATURE EXIT due to NULL result."); \
405#define RCNL(exp) do { \
406 VOLK_rc _rc = (exp); \
407 if (UNLIKELY (_rc != VOLK_OK)) { \
409 "*** PREMATURE EXIT due to non-zero exit: %s (%d)", \
410 VOLK_strerror (_rc), _rc); \
416#define PRCNL(exp) do { \
417 VOLK_rc _rc = (exp); \
418 if (UNLIKELY (_rc < VOLK_OK)) { \
420 "*** PREMATURE EXIT due to error: %s (%d)", \
421 VOLK_strerror (_rc), _rc); \
427#define NLNL(exp) do { \
428 if (UNLIKELY ((exp) == NULL)) { \
429 log_error ("*** PREMATURE EXIT due to NULL result."); \
435#define MALLOC_GUARD(var, rc) do { \
436 (var) = malloc (sizeof *(var)); \
437 if (UNLIKELY (var == NULL)) return (rc); \
441#define CALLOC_GUARD(var, rc) do { \
442 (var) = calloc (1, sizeof *(var)); \
443 if (UNLIKELY (var == NULL)) return (rc); \
471char *
strndup (
const char *src,
size_t max);
480char *
strdup (
const char *src);
489mkdir_p (
const char *path, mode_t mode);
497rm_r (
const char *path);
521 else if (utf <= 0x07FF) {
523 out[0] = (char) (((utf >> 6) & 0x1F) | 0xC0);
524 out[1] = (char) (((utf >> 0) & 0x3F) | 0x80);
528 else if (utf <= 0xFFFF) {
530 out[0] = (char) (((utf >> 12) & 0x0F) | 0xE0);
531 out[1] = (char) (((utf >> 6) & 0x3F) | 0x80);
532 out[2] = (char) (((utf >> 0) & 0x3F) | 0x80);
536 else if (utf <= 0x10FFFF) {
538 out[0] = (char) (((utf >> 18) & 0x07) | 0xF0);
539 out[1] = (char) (((utf >> 12) & 0x3F) | 0x80);
540 out[2] = (char) (((utf >> 6) & 0x3F) | 0x80);
541 out[3] = (char) (((utf >> 0) & 0x3F) | 0x80);
547 out[0] = (char) 0xEF;
548 out[1] = (char) 0xBF;
549 out[2] = (char) 0xBD;
XXH64_hash_t VOLK_Hash64
64-bit hash data type.
VOLK_Hash64 VOLK_Hash
Default hash data type.
XXH128_hash_t VOLK_Hash128
128-bit hash data type.
bool VOLK_env_is_init
Whether the environment is initialized.
char * warning_msg[]
Warning messages.
XXH32_hash_t VOLK_Hash32
32-bit hash data type.
char * strdup(const char *src)
Replacement for GNU strdup.
int utf8_encode(const uint32_t utf, unsigned char *out)
Encode a code point using UTF-8.
VOLK_rc rm_r(const char *path)
Remove a directory recursively, as in Unix "rm -r".
char * strndup(const char *src, size_t max)
Replacement for GNU strndup.
VOLK_rc mkdir_p(const char *path, mode_t mode)
Make recursive directories.
const char * VOLK_strerror(VOLK_rc rc)
Return an error message for a return code.
size_t VOLK_Key
Term key, i.e., hash of a serialized term.
char uuid_str_t[37]
UUID string tpe.
VOLK_Key VOLK_TripleKey[3]
Array of three VOLK_Key values, representing a triple.
VOLK_bool_op
Boolean operations that can be performed on a graph.
VOLK_Key VOLK_DoubleKey[2]
Array of two VOLK_Key values.
VOLK_Key VOLK_QuadKey[4]
Array of three VOLK_Key values, representing a triple with context.
@ VOLK_BOOL_XOR
Boolean XOR.
@ VOLK_BOOL_UNION
Boolean union.
@ VOLK_BOOL_SUBTRACTION
Boolean subtraction.
@ VOLK_BOOL_INTERSECTION
Boolean intersection.