]> git.proxmox.com Git - mirror_qemu.git/blame - include/qapi/visitor-impl.h
device_tree: introduce load_device_tree_from_sysfs
[mirror_qemu.git] / include / qapi / visitor-impl.h
CommitLineData
0f71a1e0
PB
1/*
2 * Core Definitions for QAPI Visitor implementations
3 *
04e070d2 4 * Copyright (C) 2012-2016 Red Hat, Inc.
0f71a1e0
PB
5 *
6 * Author: Paolo Bonizni <pbonzini@redhat.com>
7 *
8 * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
9 * See the COPYING.LIB file in the top-level directory.
10 *
11 */
12#ifndef QAPI_VISITOR_IMPL_H
13#define QAPI_VISITOR_IMPL_H
14
7b1b5d19
PB
15#include "qapi/error.h"
16#include "qapi/visitor.h"
0f71a1e0 17
7edd63f1
PB
18struct Visitor
19{
20 /* Must be set */
0b2a0d6b 21 void (*start_struct)(Visitor *v, const char *name, void **obj,
337283df 22 size_t size, Error **errp);
7edd63f1
PB
23 void (*end_struct)(Visitor *v, Error **errp);
24
25 void (*start_list)(Visitor *v, const char *name, Error **errp);
08f9541d 26 /* Must be set */
e65d89bf 27 GenericList *(*next_list)(Visitor *v, GenericList **list, size_t size);
08f9541d
EB
28 /* Must be set */
29 void (*end_list)(Visitor *v);
7edd63f1 30
dbf11922
EB
31 /* Optional, needed for input and dealloc visitors. */
32 void (*start_alternate)(Visitor *v, const char *name,
33 GenericAlternate **obj, size_t size,
34 bool promote_int, Error **errp);
35
36 /* Optional, needed for dealloc visitor. */
37 void (*end_alternate)(Visitor *v);
38
39 /* Must be set. */
0b2a0d6b 40 void (*type_enum)(Visitor *v, const char *name, int *obj,
337283df 41 const char *const strings[], Error **errp);
7edd63f1 42
4c40314a 43 /* Must be set. */
0b2a0d6b 44 void (*type_int64)(Visitor *v, const char *name, int64_t *obj,
4c40314a
EB
45 Error **errp);
46 /* Must be set. */
0b2a0d6b 47 void (*type_uint64)(Visitor *v, const char *name, uint64_t *obj,
f755dea7
EB
48 Error **errp);
49 /* Optional; fallback is type_uint64(). */
0b2a0d6b 50 void (*type_size)(Visitor *v, const char *name, uint64_t *obj,
f755dea7
EB
51 Error **errp);
52 /* Must be set. */
0b2a0d6b
EB
53 void (*type_bool)(Visitor *v, const char *name, bool *obj, Error **errp);
54 void (*type_str)(Visitor *v, const char *name, char **obj, Error **errp);
55 void (*type_number)(Visitor *v, const char *name, double *obj,
7edd63f1 56 Error **errp);
0b2a0d6b 57 void (*type_any)(Visitor *v, const char *name, QObject **obj,
28770e05 58 Error **errp);
7edd63f1 59
5cdc8831 60 /* May be NULL; most useful for input visitors. */
0b2a0d6b 61 void (*optional)(Visitor *v, const char *name, bool *present);
7edd63f1
PB
62};
63
0b2a0d6b 64void input_type_enum(Visitor *v, const char *name, int *obj,
337283df 65 const char *const strings[], Error **errp);
0b2a0d6b 66void output_type_enum(Visitor *v, const char *name, int *obj,
337283df 67 const char *const strings[], Error **errp);
0f71a1e0
PB
68
69#endif