SV* PLCB_op_counter(PLCB_t *object, plcb_SINGLEOP *opinfo) { lcb_CMDCOUNTER ccmd = { 0 }; lcb_error_t err = LCB_SUCCESS; key_from_so(opinfo, (lcb_CMDBASE *)&ccmd); PLCB_args_arithmetic(object, opinfo, &ccmd); err = lcb_counter3(object->instance, opinfo->cookie, &ccmd); return plcb_opctx_return(opinfo, err); }
LIBCOUCHBASE_API lcb_error_t lcb_arithmetic(lcb_t instance, const void *cookie, lcb_size_t num, const lcb_arithmetic_cmd_t *const *items) { unsigned ii; mcreq_sched_enter(&instance->cmdq); for (ii = 0; ii < num; ii++) { const lcb_arithmetic_cmd_t *src = items[ii]; lcb_CMDCOUNTER dst; lcb_error_t err; memset(&dst, 0, sizeof(dst)); dst.create = src->v.v0.create; dst.delta = src->v.v0.delta; dst.initial = src->v.v0.initial; dst.key.type = LCB_KV_COPY; dst.key.contig.bytes = src->v.v0.key; dst.key.contig.nbytes = src->v.v0.nkey; dst._hashkey.type = LCB_KV_COPY; dst._hashkey.contig.bytes = src->v.v0.hashkey; dst._hashkey.contig.nbytes = src->v.v0.nhashkey; dst.exptime = src->v.v0.exptime; err = lcb_counter3(instance, cookie, &dst); if (err != LCB_SUCCESS) { mcreq_sched_fail(&instance->cmdq); return err; } } mcreq_sched_leave(&instance->cmdq, 1); SYNCMODE_INTERCEPT(instance) }