30 lines
1.5 KiB
C
30 lines
1.5 KiB
C
// calogKv.h -- calog key-value library: a process-wide, thread-safe data store.
|
|
//
|
|
// Registers natives so any script, on any engine, can stash and fetch values under a
|
|
// string key in one shared store:
|
|
// kvSet(key, value) store a DEEP COPY of value under key (replaces any existing) -> nil
|
|
// kvGet(key) -> a deep copy of the stored value, or nil if the key is absent
|
|
// kvHas(key) -> true if the key is present, else false
|
|
// kvDelete(key) remove the key (no error if it is absent) -> nil
|
|
// kvKeys() -> a list of the stored keys (each a string)
|
|
//
|
|
// The store holds DATA ONLY: kvSet rejects a function value (calogFnE) so no script
|
|
// callable's lifecycle leaks into the shared store -- kv keeps only values copied by
|
|
// value. Keys are binary-safe: they are compared by bytes + length, so embedded NULs are
|
|
// honored. The registry is process-wide and reference-counted across runtimes.
|
|
|
|
#ifndef CALOG_KV_H
|
|
#define CALOG_KV_H
|
|
|
|
#include "calog.h"
|
|
|
|
// Register the kv natives on a runtime. Idempotent across runtimes (shared registry).
|
|
int32_t calogKvRegister(CalogT *calog);
|
|
|
|
// Free every stored key + value (once the last registered runtime unregisters). Like
|
|
// calogExportShutdown, call this BEFORE calogDestroy. The static registry bookkeeping is
|
|
// intentionally never freed -- the natives stay callable right up until calogDestroy tears
|
|
// the broker down -- so a native call after shutdown is safe (it just sees an empty store).
|
|
void calogKvShutdown(void);
|
|
|
|
#endif
|