blob: 0486174c74eaab6a8a949164b5b05263afd2e6a2 [file] [log] [blame]
#ifndef _QPXMLWRITER_H
#define _QPXMLWRITER_H
/*-------------------------------------------------------------------------
* drawElements Quality Program Helper Library
* -------------------------------------------
*
* Copyright 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*//*!
* \file
* \brief Test log library
*//*--------------------------------------------------------------------*/
#include "deDefs.h"
#include <stdio.h>
DE_BEGIN_EXTERN_C
typedef struct qpXmlWriter_s qpXmlWriter;
typedef enum qpXmlAttributeType_e
{
QP_XML_ATTRIBUTE_STRING = 0,
QP_XML_ATTRIBUTE_INT,
QP_XML_ATTRIBUTE_BOOL,
QP_XML_ATTRIBUTE_LAST
} qpXmlAttributeType;
typedef struct qpXmlAttribute_s
{
const char *name;
qpXmlAttributeType type;
const char *stringValue;
int intValue;
bool boolValue;
} qpXmlAttribute;
DE_INLINE qpXmlAttribute qpSetStringAttrib(const char *name, const char *value)
{
qpXmlAttribute attrib;
attrib.name = name;
attrib.type = QP_XML_ATTRIBUTE_STRING;
attrib.stringValue = value;
attrib.intValue = -678;
attrib.boolValue = (bool)0xFFFFFFFFu;
return attrib;
}
DE_INLINE qpXmlAttribute qpSetIntAttrib(const char *name, int value)
{
qpXmlAttribute attrib;
attrib.name = name;
attrib.type = QP_XML_ATTRIBUTE_INT;
attrib.stringValue = "<intAttrib>";
attrib.intValue = value;
attrib.boolValue = (bool)0xFFFFFFFFu;
return attrib;
}
DE_INLINE qpXmlAttribute qpSetBoolAttrib(const char *name, bool value)
{
qpXmlAttribute attrib;
attrib.name = name;
attrib.type = QP_XML_ATTRIBUTE_BOOL;
attrib.stringValue = "<boolAttrib>";
attrib.intValue = -679;
attrib.boolValue = value;
return attrib;
}
/*--------------------------------------------------------------------*//*!
* \brief Create a file based XML Writer instance
* \param fileName Name of the file
* \param useCompression Set to true to use compression, if supported by implementation
* \param flushAfterWrite Set to true to call fflush after writing each XML token
* \return qpXmlWriter instance, or DE_NULL if cannot create file
*//*--------------------------------------------------------------------*/
qpXmlWriter *qpXmlWriter_createFileWriter(FILE *outFile, bool useCompression, bool flushAfterWrite);
/*--------------------------------------------------------------------*//*!
* \brief XML Writer instance
* \param a qpXmlWriter instance
*//*--------------------------------------------------------------------*/
void qpXmlWriter_destroy(qpXmlWriter *writer);
/*--------------------------------------------------------------------*//*!
* \brief XML Writer instance
* \param a qpXmlWriter instance
*//*--------------------------------------------------------------------*/
void qpXmlWriter_flush(qpXmlWriter *writer);
/*--------------------------------------------------------------------*//*!
* \brief Start XML document
* \param writer qpXmlWriter instance
* \param writeXmlHeader whether to write the <xml.. header
* \return true on success, false on error
*//*--------------------------------------------------------------------*/
bool qpXmlWriter_startDocument(qpXmlWriter *writer, bool writeXmlHeader);
/*--------------------------------------------------------------------*//*!
* \brief End XML document
* \param writer qpXmlWriter instance
* \return true on success, false on error
*//*--------------------------------------------------------------------*/
bool qpXmlWriter_endDocument(qpXmlWriter *writer);
/*--------------------------------------------------------------------*//*!
* \brief Start XML element
* \param writer qpXmlWriter instance
* \param elementName Name of the element
* \return true on success, false on error
*//*--------------------------------------------------------------------*/
bool qpXmlWriter_startElement(qpXmlWriter *writer, const char *elementName, int numAttribs,
const qpXmlAttribute *attribs);
/*--------------------------------------------------------------------*//*!
* \brief End XML element
* \param writer qpXmlWriter instance
* \param elementName Name of the element
* \return true on success, false on error
*//*--------------------------------------------------------------------*/
bool qpXmlWriter_endElement(qpXmlWriter *writer, const char *elementName);
/*--------------------------------------------------------------------*//*!
* \brief Write raw string into XML document
* \param writer qpXmlWriter instance
* \param content String to be written
* \return true on success, false on error
*//*--------------------------------------------------------------------*/
bool qpXmlWriter_writeString(qpXmlWriter *writer, const char *content);
/*--------------------------------------------------------------------*//*!
* \brief Write base64 encoded data into XML document
* \param writer qpXmlWriter instance
* \param data Pointer to data to be written
* \param numBytes Length of data in bytes
* \return true on success, false on error
*//*--------------------------------------------------------------------*/
bool qpXmlWriter_writeBase64(qpXmlWriter *writer, const uint8_t *data, size_t numBytes);
/*--------------------------------------------------------------------*//*!
* \brief Convenience function for writing XML element
* \param writer qpXmlWriter instance
* \param elementName Name of the element
* \param elementContent Contents of the element
* \return true on success, false on error
*//*--------------------------------------------------------------------*/
bool qpXmlWriter_writeStringElement(qpXmlWriter *writer, const char *elementName, const char *elementContent);
DE_END_EXTERN_C
#endif /* _QPXMLWRITER_H */