1b3db211fSDaniel P. Berrange /* 2b3db211fSDaniel P. Berrange * Output Visitor 3b3db211fSDaniel P. Berrange * 4b3db211fSDaniel P. Berrange * Copyright IBM, Corp. 2011 5b3db211fSDaniel P. Berrange * 6b3db211fSDaniel P. Berrange * Authors: 7b3db211fSDaniel P. Berrange * Anthony Liguori <aliguori@us.ibm.com> 8b3db211fSDaniel P. Berrange * 9b3db211fSDaniel P. Berrange * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. 10b3db211fSDaniel P. Berrange * See the COPYING.LIB file in the top-level directory. 11b3db211fSDaniel P. Berrange * 12b3db211fSDaniel P. Berrange */ 13b3db211fSDaniel P. Berrange 14b3db211fSDaniel P. Berrange #ifndef QOBJECT_OUTPUT_VISITOR_H 15b3db211fSDaniel P. Berrange #define QOBJECT_OUTPUT_VISITOR_H 16b3db211fSDaniel P. Berrange 17b3db211fSDaniel P. Berrange #include "qapi/visitor.h" 18b3db211fSDaniel P. Berrange 197d5e199aSDaniel P. Berrange typedef struct QObjectOutputVisitor QObjectOutputVisitor; 20b3db211fSDaniel P. Berrange 21aa3a982eSMarkus Armbruster /** 22aa3a982eSMarkus Armbruster * Create a QObject output visitor for @obj 23b3db211fSDaniel P. Berrange * 24aa3a982eSMarkus Armbruster * A QObject output visitor visit builds a QObject from QAPI Object. 25aa3a982eSMarkus Armbruster * This simultaneously walks the QAPI object and the QObject being 26aa3a982eSMarkus Armbruster * built. The latter walk starts at @obj. 27aa3a982eSMarkus Armbruster * 28aa3a982eSMarkus Armbruster * visit_type_FOO() creates a QObject for QAPI type FOO. It creates a 29aa3a982eSMarkus Armbruster * QDict for struct/union types, a QList for list types, QString for 30*01b2ffceSMarc-André Lureau * type 'str' and enumeration types, QNum for integer and float 31*01b2ffceSMarc-André Lureau * types, QBool for type 'bool'. For type 'any', it increments the 32*01b2ffceSMarc-André Lureau * QObject's reference count. For QAPI alternate types, it creates 33*01b2ffceSMarc-André Lureau * the QObject for the member that is in use. 34aa3a982eSMarkus Armbruster * 35aa3a982eSMarkus Armbruster * visit_start_struct() ... visit_end_struct() visits a QAPI 36aa3a982eSMarkus Armbruster * struct/union and creates a QDict. Visits in between visit the 37aa3a982eSMarkus Armbruster * members. visit_optional() is true when the struct/union has this 38aa3a982eSMarkus Armbruster * member. visit_check_struct() does nothing. 39aa3a982eSMarkus Armbruster * 40aa3a982eSMarkus Armbruster * visit_start_list() ... visit_end_list() visits a QAPI list and 41aa3a982eSMarkus Armbruster * creates a QList. Visits in between visit list members, one after 42aa3a982eSMarkus Armbruster * the other. visit_next_list() returns NULL when all QAPI list 43aa3a982eSMarkus Armbruster * members have been visited. visit_check_list() does nothing. 44aa3a982eSMarkus Armbruster * 45aa3a982eSMarkus Armbruster * visit_start_alternate() ... visit_end_alternate() visits a QAPI 46aa3a982eSMarkus Armbruster * alternate. The visit in between creates the QObject for the 47aa3a982eSMarkus Armbruster * alternate member that is in use. 48aa3a982eSMarkus Armbruster * 49aa3a982eSMarkus Armbruster * Errors are not expected to happen. 50aa3a982eSMarkus Armbruster * 51aa3a982eSMarkus Armbruster * The caller is responsible for freeing the visitor with 52aa3a982eSMarkus Armbruster * visit_free(). 53b3db211fSDaniel P. Berrange */ 547d5e199aSDaniel P. Berrange Visitor *qobject_output_visitor_new(QObject **result); 55b3db211fSDaniel P. Berrange 56b3db211fSDaniel P. Berrange #endif 57