in include/yyjson/yyjson.h [7655:7685]
yyjson_api_inline bool yyjson_ptr_ctx_replace(yyjson_ptr_ctx *ctx,
yyjson_mut_val *val) {
yyjson_mut_val *ctn, *pre_key, *cur_key, *pre_val, *cur_val;
if (!ctx || !ctx->ctn || !ctx->pre || !val) return false;
ctn = ctx->ctn;
if (yyjson_mut_is_obj(ctn)) {
pre_key = ctx->pre;
pre_val = pre_key->next;
cur_key = pre_val->next;
cur_val = cur_key->next;
/* replace current value */
cur_key->next = val;
val->next = cur_val->next;
ctx->old = cur_val;
} else {
pre_val = ctx->pre;
cur_val = pre_val->next;
/* replace current value */
if (pre_val != cur_val) {
val->next = cur_val->next;
pre_val->next = val;
if (ctn->uni.ptr == cur_val) ctn->uni.ptr = val;
} else {
val->next = val;
ctn->uni.ptr = val;
ctx->pre = val;
}
ctx->old = cur_val;
}
return true;
}