1*35238bceSAndroid Build Coastguard Worker #ifndef _QPXMLWRITER_H
2*35238bceSAndroid Build Coastguard Worker #define _QPXMLWRITER_H
3*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program Helper Library
5*35238bceSAndroid Build Coastguard Worker * -------------------------------------------
6*35238bceSAndroid Build Coastguard Worker *
7*35238bceSAndroid Build Coastguard Worker * Copyright 2014 The Android Open Source Project
8*35238bceSAndroid Build Coastguard Worker *
9*35238bceSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
10*35238bceSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
11*35238bceSAndroid Build Coastguard Worker * You may obtain a copy of the License at
12*35238bceSAndroid Build Coastguard Worker *
13*35238bceSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
14*35238bceSAndroid Build Coastguard Worker *
15*35238bceSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
16*35238bceSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
17*35238bceSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18*35238bceSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
19*35238bceSAndroid Build Coastguard Worker * limitations under the License.
20*35238bceSAndroid Build Coastguard Worker *
21*35238bceSAndroid Build Coastguard Worker *//*!
22*35238bceSAndroid Build Coastguard Worker * \file
23*35238bceSAndroid Build Coastguard Worker * \brief Test log library
24*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
25*35238bceSAndroid Build Coastguard Worker
26*35238bceSAndroid Build Coastguard Worker #include "deDefs.h"
27*35238bceSAndroid Build Coastguard Worker
28*35238bceSAndroid Build Coastguard Worker #include <stdio.h>
29*35238bceSAndroid Build Coastguard Worker
30*35238bceSAndroid Build Coastguard Worker DE_BEGIN_EXTERN_C
31*35238bceSAndroid Build Coastguard Worker
32*35238bceSAndroid Build Coastguard Worker typedef struct qpXmlWriter_s qpXmlWriter;
33*35238bceSAndroid Build Coastguard Worker
34*35238bceSAndroid Build Coastguard Worker typedef enum qpXmlAttributeType_e
35*35238bceSAndroid Build Coastguard Worker {
36*35238bceSAndroid Build Coastguard Worker QP_XML_ATTRIBUTE_STRING = 0,
37*35238bceSAndroid Build Coastguard Worker QP_XML_ATTRIBUTE_INT,
38*35238bceSAndroid Build Coastguard Worker QP_XML_ATTRIBUTE_BOOL,
39*35238bceSAndroid Build Coastguard Worker
40*35238bceSAndroid Build Coastguard Worker QP_XML_ATTRIBUTE_LAST
41*35238bceSAndroid Build Coastguard Worker } qpXmlAttributeType;
42*35238bceSAndroid Build Coastguard Worker
43*35238bceSAndroid Build Coastguard Worker typedef struct qpXmlAttribute_s
44*35238bceSAndroid Build Coastguard Worker {
45*35238bceSAndroid Build Coastguard Worker const char *name;
46*35238bceSAndroid Build Coastguard Worker qpXmlAttributeType type;
47*35238bceSAndroid Build Coastguard Worker const char *stringValue;
48*35238bceSAndroid Build Coastguard Worker int intValue;
49*35238bceSAndroid Build Coastguard Worker bool boolValue;
50*35238bceSAndroid Build Coastguard Worker } qpXmlAttribute;
51*35238bceSAndroid Build Coastguard Worker
qpSetStringAttrib(const char * name,const char * value)52*35238bceSAndroid Build Coastguard Worker DE_INLINE qpXmlAttribute qpSetStringAttrib(const char *name, const char *value)
53*35238bceSAndroid Build Coastguard Worker {
54*35238bceSAndroid Build Coastguard Worker qpXmlAttribute attrib;
55*35238bceSAndroid Build Coastguard Worker attrib.name = name;
56*35238bceSAndroid Build Coastguard Worker attrib.type = QP_XML_ATTRIBUTE_STRING;
57*35238bceSAndroid Build Coastguard Worker attrib.stringValue = value;
58*35238bceSAndroid Build Coastguard Worker attrib.intValue = -678;
59*35238bceSAndroid Build Coastguard Worker attrib.boolValue = (bool)0xFFFFFFFFu;
60*35238bceSAndroid Build Coastguard Worker return attrib;
61*35238bceSAndroid Build Coastguard Worker }
62*35238bceSAndroid Build Coastguard Worker
qpSetIntAttrib(const char * name,int value)63*35238bceSAndroid Build Coastguard Worker DE_INLINE qpXmlAttribute qpSetIntAttrib(const char *name, int value)
64*35238bceSAndroid Build Coastguard Worker {
65*35238bceSAndroid Build Coastguard Worker qpXmlAttribute attrib;
66*35238bceSAndroid Build Coastguard Worker attrib.name = name;
67*35238bceSAndroid Build Coastguard Worker attrib.type = QP_XML_ATTRIBUTE_INT;
68*35238bceSAndroid Build Coastguard Worker attrib.stringValue = "<intAttrib>";
69*35238bceSAndroid Build Coastguard Worker attrib.intValue = value;
70*35238bceSAndroid Build Coastguard Worker attrib.boolValue = (bool)0xFFFFFFFFu;
71*35238bceSAndroid Build Coastguard Worker return attrib;
72*35238bceSAndroid Build Coastguard Worker }
73*35238bceSAndroid Build Coastguard Worker
qpSetBoolAttrib(const char * name,bool value)74*35238bceSAndroid Build Coastguard Worker DE_INLINE qpXmlAttribute qpSetBoolAttrib(const char *name, bool value)
75*35238bceSAndroid Build Coastguard Worker {
76*35238bceSAndroid Build Coastguard Worker qpXmlAttribute attrib;
77*35238bceSAndroid Build Coastguard Worker attrib.name = name;
78*35238bceSAndroid Build Coastguard Worker attrib.type = QP_XML_ATTRIBUTE_BOOL;
79*35238bceSAndroid Build Coastguard Worker attrib.stringValue = "<boolAttrib>";
80*35238bceSAndroid Build Coastguard Worker attrib.intValue = -679;
81*35238bceSAndroid Build Coastguard Worker attrib.boolValue = value;
82*35238bceSAndroid Build Coastguard Worker return attrib;
83*35238bceSAndroid Build Coastguard Worker }
84*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
85*35238bceSAndroid Build Coastguard Worker * \brief Create a file based XML Writer instance
86*35238bceSAndroid Build Coastguard Worker * \param fileName Name of the file
87*35238bceSAndroid Build Coastguard Worker * \param useCompression Set to true to use compression, if supported by implementation
88*35238bceSAndroid Build Coastguard Worker * \param flushAfterWrite Set to true to call fflush after writing each XML token
89*35238bceSAndroid Build Coastguard Worker * \return qpXmlWriter instance, or DE_NULL if cannot create file
90*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
91*35238bceSAndroid Build Coastguard Worker qpXmlWriter *qpXmlWriter_createFileWriter(FILE *outFile, bool useCompression, bool flushAfterWrite);
92*35238bceSAndroid Build Coastguard Worker
93*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
94*35238bceSAndroid Build Coastguard Worker * \brief XML Writer instance
95*35238bceSAndroid Build Coastguard Worker * \param a qpXmlWriter instance
96*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
97*35238bceSAndroid Build Coastguard Worker void qpXmlWriter_destroy(qpXmlWriter *writer);
98*35238bceSAndroid Build Coastguard Worker
99*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
100*35238bceSAndroid Build Coastguard Worker * \brief XML Writer instance
101*35238bceSAndroid Build Coastguard Worker * \param a qpXmlWriter instance
102*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
103*35238bceSAndroid Build Coastguard Worker void qpXmlWriter_flush(qpXmlWriter *writer);
104*35238bceSAndroid Build Coastguard Worker
105*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
106*35238bceSAndroid Build Coastguard Worker * \brief Start XML document
107*35238bceSAndroid Build Coastguard Worker * \param writer qpXmlWriter instance
108*35238bceSAndroid Build Coastguard Worker * \param writeXmlHeader whether to write the <xml.. header
109*35238bceSAndroid Build Coastguard Worker * \return true on success, false on error
110*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
111*35238bceSAndroid Build Coastguard Worker bool qpXmlWriter_startDocument(qpXmlWriter *writer, bool writeXmlHeader);
112*35238bceSAndroid Build Coastguard Worker
113*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
114*35238bceSAndroid Build Coastguard Worker * \brief End XML document
115*35238bceSAndroid Build Coastguard Worker * \param writer qpXmlWriter instance
116*35238bceSAndroid Build Coastguard Worker * \return true on success, false on error
117*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
118*35238bceSAndroid Build Coastguard Worker bool qpXmlWriter_endDocument(qpXmlWriter *writer);
119*35238bceSAndroid Build Coastguard Worker
120*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
121*35238bceSAndroid Build Coastguard Worker * \brief Start XML element
122*35238bceSAndroid Build Coastguard Worker * \param writer qpXmlWriter instance
123*35238bceSAndroid Build Coastguard Worker * \param elementName Name of the element
124*35238bceSAndroid Build Coastguard Worker * \return true on success, false on error
125*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
126*35238bceSAndroid Build Coastguard Worker bool qpXmlWriter_startElement(qpXmlWriter *writer, const char *elementName, int numAttribs,
127*35238bceSAndroid Build Coastguard Worker const qpXmlAttribute *attribs);
128*35238bceSAndroid Build Coastguard Worker
129*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
130*35238bceSAndroid Build Coastguard Worker * \brief End XML element
131*35238bceSAndroid Build Coastguard Worker * \param writer qpXmlWriter instance
132*35238bceSAndroid Build Coastguard Worker * \param elementName Name of the element
133*35238bceSAndroid Build Coastguard Worker * \return true on success, false on error
134*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
135*35238bceSAndroid Build Coastguard Worker bool qpXmlWriter_endElement(qpXmlWriter *writer, const char *elementName);
136*35238bceSAndroid Build Coastguard Worker
137*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
138*35238bceSAndroid Build Coastguard Worker * \brief Write raw string into XML document
139*35238bceSAndroid Build Coastguard Worker * \param writer qpXmlWriter instance
140*35238bceSAndroid Build Coastguard Worker * \param content String to be written
141*35238bceSAndroid Build Coastguard Worker * \return true on success, false on error
142*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
143*35238bceSAndroid Build Coastguard Worker bool qpXmlWriter_writeString(qpXmlWriter *writer, const char *content);
144*35238bceSAndroid Build Coastguard Worker
145*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
146*35238bceSAndroid Build Coastguard Worker * \brief Write base64 encoded data into XML document
147*35238bceSAndroid Build Coastguard Worker * \param writer qpXmlWriter instance
148*35238bceSAndroid Build Coastguard Worker * \param data Pointer to data to be written
149*35238bceSAndroid Build Coastguard Worker * \param numBytes Length of data in bytes
150*35238bceSAndroid Build Coastguard Worker * \return true on success, false on error
151*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
152*35238bceSAndroid Build Coastguard Worker bool qpXmlWriter_writeBase64(qpXmlWriter *writer, const uint8_t *data, size_t numBytes);
153*35238bceSAndroid Build Coastguard Worker
154*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
155*35238bceSAndroid Build Coastguard Worker * \brief Convenience function for writing XML element
156*35238bceSAndroid Build Coastguard Worker * \param writer qpXmlWriter instance
157*35238bceSAndroid Build Coastguard Worker * \param elementName Name of the element
158*35238bceSAndroid Build Coastguard Worker * \param elementContent Contents of the element
159*35238bceSAndroid Build Coastguard Worker * \return true on success, false on error
160*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
161*35238bceSAndroid Build Coastguard Worker bool qpXmlWriter_writeStringElement(qpXmlWriter *writer, const char *elementName, const char *elementContent);
162*35238bceSAndroid Build Coastguard Worker
163*35238bceSAndroid Build Coastguard Worker DE_END_EXTERN_C
164*35238bceSAndroid Build Coastguard Worker
165*35238bceSAndroid Build Coastguard Worker #endif /* _QPXMLWRITER_H */
166