1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
#ifndef __UI_HH__
#define __UI_HH__
// copyright (C) 2002, 2003 graydon hoare <graydon@pobox.com>
// all rights reserved.
// licensed to the public under the terms of the GNU GPL (>= 2)
// see the file COPYING for details
// this file contains a couple utilities to deal with the user
// interface. the global user_interface object 'ui' owns cerr, so
// no writing to it directly!
#include <map>
#include <set>
#include <string>
#include <boost/format.hpp>
struct user_interface;
struct ticker
{
size_t ticks;
size_t mod;
std::string name;
std::string shortname;
ticker(std::string const & n, std::string const & s, size_t mod = 64);
void operator++();
void operator+=(size_t t);
~ticker();
};
struct tick_writer
{
public:
tick_writer() {}
virtual ~tick_writer() {}
virtual void write_ticks() = 0;
};
struct tick_write_count : virtual public tick_writer
{
public:
tick_write_count();
~tick_write_count();
void write_ticks();
private:
size_t last_tick_len;
};
struct tick_write_dot : virtual public tick_writer
{
public:
tick_write_dot();
~tick_write_dot();
void write_ticks();
private:
std::map<std::string,size_t> last_ticks;
};
struct tick_write_nothing : virtual public tick_writer
{
public:
void write_ticks() {}
};
struct user_interface
{
public:
user_interface();
~user_interface();
void warn(std::string const & warning);
void warn(boost::format const & fmt) { warn(fmt.str()); }
void fatal(std::string const & warning);
void fatal(boost::format const & fmt) { warn(fmt.str()); }
void inform(std::string const & line);
void inform(boost::format const & fmt) { inform(fmt.str()); }
void set_tick_trailer(std::string const & trailer);
void set_tick_writer(tick_writer * t_writer);
void ensure_clean_line();
private:
std::set<std::string> issued_warnings;
bool some_tick_is_dirty; // At least one tick needs being printed
bool last_write_was_a_tick;
std::map<std::string,ticker *> tickers;
tick_writer * t_writer;
void finish_ticking();
void write_ticks();
std::string tick_trailer;
friend struct tick_write_dot;
friend struct tick_write_count;
friend struct ticker;
};
extern struct user_interface ui;
#endif // __UI_HH__
|