/**
* @file xml_utils.h
* utility routines for generating XML
*
* @remark Copyright 2006 OProfile authors
* @remark Read the file COPYING
*
* @author Dave Nomura
*/
#ifndef XML_UTILS_H
#define XML_UTILS_H
#include "symbol.h"
#include "format_output.h"
#include "xml_output.h"
typedef symbol_collection::const_iterator sym_iterator;
extern bool want_xml;
class extra_images;
class op_bfd;
class xml_utils {
public:
xml_utils(format_output::xml_formatter * xo,
symbol_collection const & s, size_t nc,
extra_images const & extra);
// these members are static because they are invoked before
// the xml_utils object has been created
static std::string get_timer_setup(size_t count);
static std::string get_event_setup(std::string event, size_t count,
std::string unit_mask);
static std::string get_profile_header(std::string cpu_name,
double const speed);
static void set_nr_cpus(size_t cpus);
static void set_nr_events(size_t events);
static void set_has_nonzero_masks();
static void add_option(tag_t tag, bool value);
static void add_option(tag_t tag, std::string const & value);
static void add_option(tag_t tag, std::vector<std::string> const & value);
static void add_option(tag_t tag, std::list<std::string> const & value);
static void output_xml_header(std::string const & command_options,
std::string const & cpu_info,
std::string const & events);
void output_symbol_bytes(std::ostream & out, symbol_entry const * symb,
size_t sym_id, op_bfd const & abfd);
bool output_summary_data(std::ostream & out, count_array_t const & summary,
size_t pclass);
size_t get_symbol_index(sym_iterator const it);
void output_program_structure(std::ostream & out);
void build_subclasses(std::ostream & out);
private:
bool multiple_events;
bool has_subclasses;
size_t bytes_index;
extra_images const & extra_found_images;
static bool has_nonzero_masks;
static size_t events_index;
};
extern xml_utils * xml_support;
#endif /* !XML_UTILS_H */