18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file xml_output.cpp
38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * utility routines for writing XML
48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2006 OProfile authors
68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING
78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Dave Nomura
98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */
108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <sstream>
128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <iostream>
138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_xml_out.h"
158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "xml_output.h"
168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddusing namespace std;
188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define MAX_XML_BUF 16384
208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstatic char buf[MAX_XML_BUF];
218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstring tag_name(tag_t tag)
238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	ostringstream out;
258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	out << xml_tag_name(tag);
268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	return out.str();
278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstring open_element(tag_t tag, bool with_attrs)
318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	ostringstream out;
338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	buf[0] = '\0';
358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	open_xml_element(tag, with_attrs, buf, MAX_XML_BUF);
368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	out << buf;
378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	return out.str();
388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstring close_element(tag_t tag, bool has_nested)
428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	ostringstream out;
448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	buf[0] = '\0';
468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	close_xml_element(tag, has_nested, buf, MAX_XML_BUF);
478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	out << buf;
488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	return out.str();
498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstring init_attr(tag_t attr, size_t value)
538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	ostringstream out;
558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	buf[0] = '\0';
578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	init_xml_int_attr(attr, value, buf, MAX_XML_BUF);
588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	out << buf;
598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	return out.str();
608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstring init_attr(tag_t attr, double value)
648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	ostringstream out;
668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	buf[0] = '\0';
688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	init_xml_dbl_attr(attr, value, buf, MAX_XML_BUF);
698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	out << buf;
708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	return out.str();
718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstring init_attr(tag_t attr, string const & str)
758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	ostringstream out;
778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	buf[0] = '\0';
798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	init_xml_str_attr(attr, str.c_str(), buf, MAX_XML_BUF);
808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	out << buf;
818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	return out.str();
828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
83