|
|
1.1 root 1: /*
2: * Core Definitions for QAPI Visitor Classes
3: *
4: * Copyright IBM, Corp. 2011
5: *
6: * Authors:
7: * Anthony Liguori <[email protected]>
8: *
9: * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
10: * See the COPYING.LIB file in the top-level directory.
11: *
12: */
13: #ifndef QAPI_VISITOR_CORE_H
14: #define QAPI_VISITOR_CORE_H
15:
16: #include "qapi/qapi-types-core.h"
17: #include <stdlib.h>
18:
19: typedef struct GenericList
20: {
21: void *value;
22: struct GenericList *next;
23: } GenericList;
24:
25: typedef struct Visitor Visitor;
26:
27: struct Visitor
28: {
29: /* Must be set */
30: void (*start_struct)(Visitor *v, void **obj, const char *kind,
31: const char *name, size_t size, Error **errp);
32: void (*end_struct)(Visitor *v, Error **errp);
33:
34: void (*start_list)(Visitor *v, const char *name, Error **errp);
35: GenericList *(*next_list)(Visitor *v, GenericList **list, Error **errp);
36: void (*end_list)(Visitor *v, Error **errp);
37:
38: void (*type_enum)(Visitor *v, int *obj, const char *strings[],
39: const char *kind, const char *name, Error **errp);
40:
41: void (*type_int)(Visitor *v, int64_t *obj, const char *name, Error **errp);
42: void (*type_bool)(Visitor *v, bool *obj, const char *name, Error **errp);
43: void (*type_str)(Visitor *v, char **obj, const char *name, Error **errp);
44: void (*type_number)(Visitor *v, double *obj, const char *name,
45: Error **errp);
46:
47: /* May be NULL */
48: void (*start_optional)(Visitor *v, bool *present, const char *name,
49: Error **errp);
50: void (*end_optional)(Visitor *v, Error **errp);
51:
52: void (*start_handle)(Visitor *v, void **obj, const char *kind,
53: const char *name, Error **errp);
54: void (*end_handle)(Visitor *v, Error **errp);
55: };
56:
57: void visit_start_handle(Visitor *v, void **obj, const char *kind,
58: const char *name, Error **errp);
59: void visit_end_handle(Visitor *v, Error **errp);
60: void visit_start_struct(Visitor *v, void **obj, const char *kind,
61: const char *name, size_t size, Error **errp);
62: void visit_end_struct(Visitor *v, Error **errp);
63: void visit_start_list(Visitor *v, const char *name, Error **errp);
64: GenericList *visit_next_list(Visitor *v, GenericList **list, Error **errp);
65: void visit_end_list(Visitor *v, Error **errp);
66: void visit_start_optional(Visitor *v, bool *present, const char *name,
67: Error **errp);
68: void visit_end_optional(Visitor *v, Error **errp);
69: void visit_type_enum(Visitor *v, int *obj, const char *strings[],
70: const char *kind, const char *name, Error **errp);
71: void visit_type_int(Visitor *v, int64_t *obj, const char *name, Error **errp);
72: void visit_type_bool(Visitor *v, bool *obj, const char *name, Error **errp);
73: void visit_type_str(Visitor *v, char **obj, const char *name, Error **errp);
74: void visit_type_number(Visitor *v, double *obj, const char *name, Error **errp);
75:
76: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.