56#include "xtc_export.h"
63typedef struct xtc_lrlock xtc_lrlock_t;
66typedef void (*xtc_lrlock_apply_fn)(
void *data,
const void *op,
size_t op_size);
70typedef void (*xtc_lrlock_sync_fn)(
void *dst,
const void *src,
size_t data_size);
73#define XTC_LRLOCK_COW (1u << 0)
75typedef struct xtc_lrlock_opts {
78 xtc_lrlock_apply_fn apply_fn;
79 xtc_lrlock_sync_fn sync_fn;
81 size_t oplog_capacity;
105XTC_API
int xtc_lrlock_create(
size_t data_size,
106 xtc_lrlock_apply_fn apply_fn,
107 xtc_lrlock_sync_fn sync_fn,
114XTC_API
void xtc_lrlock_destroy(xtc_lrlock_t *lr);
126XTC_API
const void *xtc_lrlock_read_begin(xtc_lrlock_t *lr);
127XTC_API
void xtc_lrlock_read_end(xtc_lrlock_t *lr);
130XTC_API
void *xtc_lrlock_write_begin(xtc_lrlock_t *lr);
131XTC_API
void xtc_lrlock_apply_op(xtc_lrlock_t *lr,
const void *op,
size_t op_size);
132XTC_API
void xtc_lrlock_publish(xtc_lrlock_t *lr);
136XTC_API
void xtc_lrlock_publish_full_sync(xtc_lrlock_t *lr);
138XTC_API
void xtc_lrlock_write_end(xtc_lrlock_t *lr);
141XTC_API
const void *xtc_lrlock_read_data(xtc_lrlock_t *lr);
142XTC_API
void *xtc_lrlock_write_data(xtc_lrlock_t *lr);
146XTC_API
void xtc_lrlock_mark_ready(xtc_lrlock_t *lr);
168XTC_API
int xtc_alrlock_create(
size_t data_size,
169 xtc_lrlock_apply_fn apply_fn,
170 xtc_lrlock_sync_fn sync_fn,