cgognStream.h 4.5 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-2012, 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.unistra.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
#ifdef WITH_QT
55
56
57
58
59
60
61
62
63
64
/**
 * 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);

65
66
#endif

67
68
69
70
71
/**
 * set all outputs to string stream buffer
 */
void allToBuffer(std::stringstream* ss);

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

class Special
{};

85

Sylvain Thery's avatar
Sylvain Thery committed
86
87
88
89
90
91
class Out
{
protected:
	int m_out_mode;

	std::stringstream m_buffer;
92
93
	
#ifdef WITH_QT
Sylvain Thery's avatar
Sylvain Thery committed
94
95
96
97
98
	Utils::QT::SimpleQT* m_sqt_bar;

	Utils::QT::SimpleQT* m_sqt_console;

	QTextEdit* m_qte;
99
#endif
100

Sylvain Thery's avatar
Sylvain Thery committed
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
	std::ofstream* m_ofs;

	std::stringstream* m_oss;

	int m_code;

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

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

	/**
	 * set output to standard
	 */
121
	void toStd(bool yes = true);
Sylvain Thery's avatar
Sylvain Thery committed
122
123
124
125

	/**
	 * set output to file
	 */
Pierre Kraemer's avatar
merge..    
Pierre Kraemer committed
126
	void toFile(const std::string& filename);
Sylvain Thery's avatar
Sylvain Thery committed
127

128
#ifdef WITH_QT
Sylvain Thery's avatar
Sylvain Thery committed
129
130
131
	/**
	 * set output to status bar of Qt interface
	 */
132
	void toStatusBar(Utils::QT::SimpleQT* sqt);
Sylvain Thery's avatar
Sylvain Thery committed
133
134
135
136

	/**
	 * set output to console of Qt interface
	 */
137
	void toConsole(Utils::QT::SimpleQT* sqt);
138
#endif
Sylvain Thery's avatar
Sylvain Thery committed
139
140
141
142

	/**
	 * set output to string stream buffer
	 */
143
	void toBuffer(std::stringstream* ss);
Sylvain Thery's avatar
Sylvain Thery committed
144
145
146
147

	/**
	 * recursive stream operator
	 */
148
	Out& operator<< (Out& cgstr);
Sylvain Thery's avatar
Sylvain Thery committed
149
150
151
152
153

	/**
	 * classic stream operator
	 */
	template <typename T>
154
	Out& operator<< (const T& val);
Sylvain Thery's avatar
Sylvain Thery committed
155
156
157
158

	/**
	 * special cases (endl) stream operator
	 */
159
	Out&  operator<< (Special& os  );
Sylvain Thery's avatar
Sylvain Thery committed
160
161
162
163
164
165
166
167
168
169

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

/**
 * output stream class for error output (replace cout by cerr)
 */
170
class Err: public Out
Sylvain Thery's avatar
Sylvain Thery committed
171
172
{
public:
Pierre Kraemer's avatar
merge..    
Pierre Kraemer committed
173
	Err() { this->m_code = 1; }
Sylvain Thery's avatar
Sylvain Thery committed
174
175
};

176
class Dbg: public Out
Sylvain Thery's avatar
Sylvain Thery committed
177
178
{
public:
179
	Dbg() { this->m_code = 100; }
Sylvain Thery's avatar
Sylvain Thery committed
180
181
};

182
183
184
185
186
187
188
189
190

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;

191
	if (m_out_mode & (FILEOUT|QTSTATUSBAR|QTCONSOLE|SSBUFFER))
192
193
194
195
196
		m_buffer << val;

	return *this;
}

Pierre Kraemer's avatar
merge..    
Pierre Kraemer committed
197
} // namespace CGoGNStream
Sylvain Thery's avatar
Sylvain Thery committed
198
199

// glocal stream definitions
200
201
202
extern CGoGNStream::Out CGoGNout;
extern CGoGNStream::Err CGoGNerr;
extern CGoGNStream::Dbg CGoGNdbg;
Sylvain Thery's avatar
Sylvain Thery committed
203
extern CGoGNStream::Special CGoGNendl;
Sylvain Thery's avatar
Sylvain Thery committed
204
extern CGoGNStream::Special CGoGNflush;
Sylvain Thery's avatar
Sylvain Thery committed
205

Pierre Kraemer's avatar
merge..    
Pierre Kraemer committed
206
} // namespace CGoGN
Sylvain Thery's avatar
Sylvain Thery committed
207
208

#endif /* CGOGNSTREAM_H_ */