55#include "xtc_export.h"
62typedef struct xtc_lrlock xtc_lrlock_t;
65typedef void (*xtc_lrlock_apply_fn)(
void *data,
const void *op,
size_t op_size);
69typedef void (*xtc_lrlock_sync_fn)(
void *dst,
const void *src,
size_t data_size);
72#define XTC_LRLOCK_COW (1u << 0)
74typedef struct xtc_lrlock_opts {
77 xtc_lrlock_apply_fn apply_fn;
78 xtc_lrlock_sync_fn sync_fn;
80 size_t oplog_capacity;
104XTC_API
int xtc_lrlock_create(
size_t data_size,
105 xtc_lrlock_apply_fn apply_fn,
106 xtc_lrlock_sync_fn sync_fn,
113XTC_API
void xtc_lrlock_destroy(xtc_lrlock_t *lr);
125XTC_API
const void *xtc_lrlock_read_begin(xtc_lrlock_t *lr);
126XTC_API
void xtc_lrlock_read_end(xtc_lrlock_t *lr);
129XTC_API
void *xtc_lrlock_write_begin(xtc_lrlock_t *lr);
130XTC_API
void xtc_lrlock_apply_op(xtc_lrlock_t *lr,
const void *op,
size_t op_size);
131XTC_API
void xtc_lrlock_publish(xtc_lrlock_t *lr);
135XTC_API
void xtc_lrlock_publish_full_sync(xtc_lrlock_t *lr);
137XTC_API
void xtc_lrlock_write_end(xtc_lrlock_t *lr);
140XTC_API
const void *xtc_lrlock_read_data(xtc_lrlock_t *lr);
141XTC_API
void *xtc_lrlock_write_data(xtc_lrlock_t *lr);
145XTC_API
void xtc_lrlock_mark_ready(xtc_lrlock_t *lr);
167XTC_API
int xtc_alrlock_create(
size_t data_size,
168 xtc_lrlock_apply_fn apply_fn,
169 xtc_lrlock_sync_fn sync_fn,