Statistics
| Branch: | Revision:

root / qapi / qapi-visit-core.h @ 2345c77c

History | View | Annotate | Download (2.9 kB)

1
/*
2
 * Core Definitions for QAPI Visitor Classes
3
 *
4
 * Copyright IBM, Corp. 2011
5
 *
6
 * Authors:
7
 *  Anthony Liguori   <aliguori@us.ibm.com>
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