cgognStream.h 4.43 KB
Newer Older
Sylvain Thery's avatar
Sylvain Thery committed
1 2 3
/*******************************************************************************
 * CGoGN: Combinatorial and Geometric modeling with Generic N-dimensional Maps  *
 * version 0.1                                                                  *
4
 * Copyright (C) 2009-2011, IGG Team, LSIIT, University of Strasbourg           *
Sylvain Thery's avatar
Sylvain Thery committed
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
 *                                                                              *
 * This library is free software; you can redistribute it and/or modify it      *
 * under the terms of the GNU Lesser General Public License as published by the *
 * Free Software Foundation; either version 2.1 of the License, or (at your     *
 * option) any later version.                                                   *
 *                                                                              *
 * This library is distributed in the hope that it will be useful, but WITHOUT  *
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or        *
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License  *
 * for more details.                                                            *
 *                                                                              *
 * You should have received a copy of the GNU Lesser General Public License     *
 * along with this library; if not, write to the Free Software Foundation,      *
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.           *
 *                                                                              *
20
 * Web site: http://cgogn.u-strasbg.fr/                                         *
Sylvain Thery's avatar
Sylvain Thery committed
21 22 23 24 25 26 27 28 29 30 31 32 33
 * Contact information: cgogn@unistra.fr                                        *
 *                                                                              *
 *******************************************************************************/

#ifndef _CGOGNSTREAM_H_
#define _CGOGNSTREAM_H_


#include <string>
#include <iostream>
#include <sstream>
#include <fstream>

Pierre Kraemer's avatar
merge..  
Pierre Kraemer committed
34 35
//forward definitions
namespace CGoGN { namespace Utils { namespace QT { class SimpleQT; } } }
Sylvain Thery's avatar
Sylvain Thery committed
36 37 38 39
class QTextEdit;

namespace CGoGN
{
Pierre Kraemer's avatar
merge..  
Pierre Kraemer committed
40

41
namespace CGoGNStream
Sylvain Thery's avatar
Sylvain Thery committed
42
{
Pierre Kraemer's avatar
merge..  
Pierre Kraemer committed
43

44 45 46 47 48 49 50 51
/**
 * set all outputs to std
 */
void allToStd(bool yes = true);

/**
 * set all outputs to file
 */
Pierre Kraemer's avatar
merge..  
Pierre Kraemer committed
52
void allToFile(const std::string& filename);
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

/**
 * set all outputs to status bar of Qt interface
 */
void allToStatusBar(Utils::QT::SimpleQT* sqt);

/**
 * set all outputs to console of Qt interface
 */
void allToConsole(Utils::QT::SimpleQT* sqt);

/**
 * set all outputs to string stream buffer
 */
void allToBuffer(std::stringstream* ss);

Pierre Kraemer's avatar
merge..  
Pierre Kraemer committed
69 70 71 72 73 74 75 76 77
enum drawingType
{
	STDOUT = 1,
	STDERR = 2,
	FILEOUT = 4,
	QTSTATUSBAR = 8,
	QTCONSOLE = 16,
	SSBUFFER = 32
};
Sylvain Thery's avatar
Sylvain Thery committed
78 79 80 81

class Special
{};

82

Sylvain Thery's avatar
Sylvain Thery committed
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
class Out
{
protected:
	int m_out_mode;

	std::stringstream m_buffer;

	Utils::QT::SimpleQT* m_sqt_bar;

	Utils::QT::SimpleQT* m_sqt_console;

	QTextEdit* m_qte;

	std::ofstream* m_ofs;

	std::stringstream* m_oss;

	int m_code;

public:
	/**
	 * constructor
	 */
	Out();

	/**
	 * destructor
	 */
	~Out();

	/**
	 * set output to standard
	 */
116
	void toStd(bool yes = true);
Sylvain Thery's avatar
Sylvain Thery committed
117 118 119 120

	/**
	 * set output to file
	 */
Pierre Kraemer's avatar
merge..  
Pierre Kraemer committed
121
	void toFile(const std::string& filename);
Sylvain Thery's avatar
Sylvain Thery committed
122 123 124 125

	/**
	 * set output to status bar of Qt interface
	 */
126
	void toStatusBar(Utils::QT::SimpleQT* sqt);
Sylvain Thery's avatar
Sylvain Thery committed
127 128 129 130

	/**
	 * set output to console of Qt interface
	 */
131
	void toConsole(Utils::QT::SimpleQT* sqt);
Sylvain Thery's avatar
Sylvain Thery committed
132 133 134 135

	/**
	 * set output to string stream buffer
	 */
136
	void toBuffer(std::stringstream* ss);
Sylvain Thery's avatar
Sylvain Thery committed
137 138 139 140

	/**
	 * recursive stream operator
	 */
141
	Out& operator<< (Out& cgstr);
Sylvain Thery's avatar
Sylvain Thery committed
142 143 144 145 146

	/**
	 * classic stream operator
	 */
	template <typename T>
147
	Out& operator<< (const T& val);
Sylvain Thery's avatar
Sylvain Thery committed
148 149 150 151

	/**
	 * special cases (endl) stream operator
	 */
152
	Out&  operator<< (Special& os  );
Sylvain Thery's avatar
Sylvain Thery committed
153 154 155 156 157 158 159 160 161 162

	/**
	 * for file closing
	 */
	void close();
};

/**
 * output stream class for error output (replace cout by cerr)
 */
163
class Err: public Out
Sylvain Thery's avatar
Sylvain Thery committed
164 165
{
public:
Pierre Kraemer's avatar
merge..  
Pierre Kraemer committed
166
	Err() { this->m_code = 1; }
Sylvain Thery's avatar
Sylvain Thery committed
167 168
};

169
class Dbg: public Out
Sylvain Thery's avatar
Sylvain Thery committed
170 171
{
public:
172
	Dbg() { this->m_code = 100; }
Sylvain Thery's avatar
Sylvain Thery committed
173 174
};

175 176 177 178 179 180 181 182 183 184 185 186 187 188 189

template <typename T>
Out&  Out::operator<< (const T& val)
{
	if (m_out_mode & STDOUT)
		std::cout << val;
	if (m_out_mode & STDERR)
		std::cerr << val;

	if (m_out_mode && (FILEOUT|QTSTATUSBAR|QTCONSOLE|SSBUFFER))
		m_buffer << val;

	return *this;
}

Pierre Kraemer's avatar
merge..  
Pierre Kraemer committed
190
} // namespace CGoGNStream
Sylvain Thery's avatar
Sylvain Thery committed
191 192

// glocal stream definitions
193 194 195
extern CGoGNStream::Out CGoGNout;
extern CGoGNStream::Err CGoGNerr;
extern CGoGNStream::Dbg CGoGNdbg;
Sylvain Thery's avatar
Sylvain Thery committed
196
extern CGoGNStream::Special CGoGNendl;
Sylvain Thery's avatar
Sylvain Thery committed
197
extern CGoGNStream::Special CGoGNflush;
Sylvain Thery's avatar
Sylvain Thery committed
198

Pierre Kraemer's avatar
merge..  
Pierre Kraemer committed
199
} // namespace CGoGN
Sylvain Thery's avatar
Sylvain Thery committed
200 201

#endif /* CGOGNSTREAM_H_ */