static void qapi_dealloc_start_struct(Visitor *v, void **obj, const char *kind, const char *name, size_t unused, Error **errp) { QapiDeallocVisitor *qov = to_qov(v); qapi_dealloc_push(qov, obj); }
static void qobject_output_type_any(Visitor *v, const char *name, QObject **obj, Error **errp) { QObjectOutputVisitor *qov = to_qov(v); qobject_incref(*obj); qobject_output_add_obj(qov, name, *obj); }
static void qapi_dealloc_start_implicit_struct(Visitor *v, void **obj, size_t size, Error **errp) { QapiDeallocVisitor *qov = to_qov(v); qapi_dealloc_push(qov, obj); }
static void qapi_dealloc_end_implicit_struct(Visitor *v, Error **errp) { QapiDeallocVisitor *qov = to_qov(v); void **obj = qapi_dealloc_pop(qov); if (obj) { g_free(*obj); } }
static void qobject_output_start_struct(Visitor *v, const char *name, void **obj, size_t unused, Error **errp) { QObjectOutputVisitor *qov = to_qov(v); QDict *dict = qdict_new(); qobject_output_add(qov, name, dict); qobject_output_push(qov, dict, obj); }
static void qobject_output_type_str(Visitor *v, const char *name, char **obj, Error **errp) { QObjectOutputVisitor *qov = to_qov(v); if (*obj) { qobject_output_add(qov, name, qstring_from_str(*obj)); } else { qobject_output_add(qov, name, qstring_from_str("")); } }
static void qobject_output_start_list(Visitor *v, const char *name, GenericList **listp, size_t size, Error **errp) { QObjectOutputVisitor *qov = to_qov(v); QList *list = qlist_new(); qobject_output_add(qov, name, list); qobject_output_push(qov, list, listp); }
/* Finish building, and return the root object. * The root object is never null. The caller becomes the object's * owner, and should use qobject_unref() when done with it. */ static void qobject_output_complete(Visitor *v, void *opaque) { QObjectOutputVisitor *qov = to_qov(v); /* A visit must have occurred, with each start paired with end. */ assert(qov->root && QSLIST_EMPTY(&qov->stack)); assert(opaque == qov->result); *qov->result = qobject_ref(qov->root); qov->result = NULL; }
static void qobject_output_free(Visitor *v) { QObjectOutputVisitor *qov = to_qov(v); QStackEntry *e; while (!QSLIST_EMPTY(&qov->stack)) { e = QSLIST_FIRST(&qov->stack); QSLIST_REMOVE_HEAD(&qov->stack, node); g_free(e); } qobject_decref(qov->root); g_free(qov); }
static GenericList *qapi_dealloc_next_list(Visitor *v, GenericList **listp, Error **errp) { GenericList *list = *listp; QapiDeallocVisitor *qov = to_qov(v); StackEntry *e = QTAILQ_FIRST(&qov->stack); if (e && e->is_list_head) { e->is_list_head = false; return list; } if (list) { list = list->next; g_free(*listp); return list; } return NULL; }
static void qapi_dealloc_start_list(Visitor *v, const char *name, Error **errp) { QapiDeallocVisitor *qov = to_qov(v); qapi_dealloc_push(qov, NULL); }
static void qobject_output_end_list(Visitor *v, void **obj) { QObjectOutputVisitor *qov = to_qov(v); QObject *value = qobject_output_pop(qov, obj); assert(qobject_type(value) == QTYPE_QLIST); }
static void qobject_output_type_uint64(Visitor *v, const char *name, uint64_t *obj, Error **errp) { QObjectOutputVisitor *qov = to_qov(v); qobject_output_add(qov, name, qnum_from_uint(*obj)); }
static void qobject_output_type_bool(Visitor *v, const char *name, bool *obj, Error **errp) { QObjectOutputVisitor *qov = to_qov(v); qobject_output_add(qov, name, qbool_from_bool(*obj)); }
static void qapi_dealloc_end_list(Visitor *v, Error **errp) { QapiDeallocVisitor *qov = to_qov(v); void *obj = qapi_dealloc_pop(qov); assert(obj == NULL); /* should've been list head tracker with no payload */ }
static void qobject_output_type_null(Visitor *v, const char *name, QNull **obj, Error **errp) { QObjectOutputVisitor *qov = to_qov(v); qobject_output_add(qov, name, qnull()); }
static void qobject_output_type_number(Visitor *v, const char *name, double *obj, Error **errp) { QObjectOutputVisitor *qov = to_qov(v); qobject_output_add(qov, name, qnum_from_double(*obj)); }