60typedef struct xtc_lrlock xtc_lrlock_t;
63typedef void (*xtc_lrlock_apply_fn)(
void *data,
const void *op,
size_t op_size);
67typedef void (*xtc_lrlock_sync_fn)(
void *dst,
const void *src,
size_t data_size);
70#define XTC_LRLOCK_COW (1u << 0)
72typedef struct xtc_lrlock_opts {
75 xtc_lrlock_apply_fn apply_fn;
76 xtc_lrlock_sync_fn sync_fn;
78 size_t oplog_capacity;
102int xtc_lrlock_create(
size_t data_size,
103 xtc_lrlock_apply_fn apply_fn,
104 xtc_lrlock_sync_fn sync_fn,
111void xtc_lrlock_destroy(xtc_lrlock_t *lr);
123const void *xtc_lrlock_read_begin(xtc_lrlock_t *lr);
124void xtc_lrlock_read_end(xtc_lrlock_t *lr);
127void *xtc_lrlock_write_begin(xtc_lrlock_t *lr);
128void xtc_lrlock_apply_op(xtc_lrlock_t *lr,
const void *op,
size_t op_size);
129void xtc_lrlock_publish(xtc_lrlock_t *lr);
133void xtc_lrlock_publish_full_sync(xtc_lrlock_t *lr);
135void xtc_lrlock_write_end(xtc_lrlock_t *lr);
138const void *xtc_lrlock_read_data(xtc_lrlock_t *lr);
139void *xtc_lrlock_write_data(xtc_lrlock_t *lr);
143void xtc_lrlock_mark_ready(xtc_lrlock_t *lr);