Data-HashMap-Shared
view release on metacpan or search on metacpan
shm_generic.h view on Meta::CPAN
/*
* shm_generic.h â Macro-template for shared-memory hash maps.
*
* Before including, define:
* SHM_PREFIX â function prefix (e.g., shm_ii)
* SHM_NODE_TYPE â node struct name
* SHM_VARIANT_ID â unique integer for header validation
*
* Key type (choose one):
* SHM_KEY_IS_INT + SHM_KEY_INT_TYPE â integer key
* (leave undefined for string keys via arena)
*
* Value type (choose one):
* SHM_VAL_IS_STR â string value via arena
* SHM_VAL_INT_TYPE â integer value
*
* Optional:
* SHM_HAS_COUNTERS â generate incr/decr/incr_by and integer cas (integer values only)
*/
/* ================================================================
* Part 1: Shared definitions (included once)
* ================================================================ */
#ifndef SHM_DEFS_H
#define SHM_DEFS_H
#include <stdint.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
#include <sys/mman.h>
#include <sys/stat.h>
#if defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
#error "shm_generic.h: inline string packing requires little-endian architecture"
#endif
#include <sys/file.h>
#include <pthread.h> /* pthread_atfork â available in libc on modern glibc; no -lpthread needed */
#include <sys/syscall.h>
#include <limits.h>
#include <signal.h>
#include <errno.h>
#include <linux/futex.h>
#ifdef __SSE2__
#include <emmintrin.h>
#endif
#define XXH_INLINE_ALL
#include "xxhash.h"
/* ---- Constants ---- */
#define SHM_MAGIC 0x53484D31U /* "SHM1" */
#define SHM_VERSION 9
#define SHM_READER_SLOTS 1024 /* max concurrent reader processes for dead-process recovery */
#define SHM_INITIAL_CAP 16
#define SHM_MAX_STR_LEN 0x3FFFFFFFU /* ~1GB, bit 30 reserved for inline flag */
( run in 2.898 seconds using v1.01-cache-2.11-cpan-483215c6ad5 )