Point Cloud Library (PCL)  1.12.1-dev
print.h
1 /*
2  * Software License Agreement (BSD License)
3  *
4  * Copyright (c) 2010, Willow Garage, Inc.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above
14  * copyright notice, this list of conditions and the following
15  * disclaimer in the documentation and/or other materials provided
16  * with the distribution.
17  * * Neither the name of the copyright holder(s) nor the names of its
18  * contributors may be used to endorse or promote products derived
19  * from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  *
34  * $Id$
35  *
36  */
37 
38 #pragma once
39 
40 #include <cstdio>
41 
42 #include <pcl/pcl_exports.h>
43 #include <pcl/pcl_config.h>
44 
45 // Use e.g. like this:
46 // PCL_INFO_STREAM("Info: this is a point: " << pcl::PointXYZ(1.0, 2.0, 3.0) << std::endl);
47 // PCL_ERROR_STREAM("Error: an Eigen vector: " << std::endl << Eigen::Vector3f(1.0, 2.0, 3.0) << std::endl);
48 #define PCL_LOG_STREAM(LEVEL, STREAM, CSTR, ATTR, FG, ARGS) if(pcl::console::isVerbosityLevelEnabled(pcl::console::LEVEL)) { fflush(stdout); pcl::console::change_text_color(CSTR, pcl::console::ATTR, pcl::console::FG); STREAM << ARGS; pcl::console::reset_text_color(CSTR); }
49 #define PCL_ALWAYS_STREAM(ARGS) PCL_LOG_STREAM(L_ALWAYS, std::cout, stdout, TT_RESET, TT_WHITE, ARGS)
50 #define PCL_ERROR_STREAM(ARGS) PCL_LOG_STREAM(L_ERROR, std::cerr, stderr, TT_BRIGHT, TT_RED, ARGS)
51 #define PCL_WARN_STREAM(ARGS) PCL_LOG_STREAM(L_WARN, std::cerr, stderr, TT_BRIGHT, TT_YELLOW, ARGS)
52 #define PCL_INFO_STREAM(ARGS) PCL_LOG_STREAM(L_INFO, std::cout, stdout, TT_RESET, TT_WHITE, ARGS)
53 #define PCL_DEBUG_STREAM(ARGS) PCL_LOG_STREAM(L_DEBUG, std::cout, stdout, TT_RESET, TT_GREEN, ARGS)
54 #define PCL_VERBOSE_STREAM(ARGS) PCL_LOG_STREAM(L_VERBOSE, std::cout, stdout, TT_RESET, TT_WHITE, ARGS)
55 
56 
57 #define PCL_ALWAYS(...) pcl::console::print (pcl::console::L_ALWAYS, __VA_ARGS__)
58 #define PCL_ERROR(...) pcl::console::print (pcl::console::L_ERROR, __VA_ARGS__)
59 #define PCL_WARN(...) pcl::console::print (pcl::console::L_WARN, __VA_ARGS__)
60 #define PCL_INFO(...) pcl::console::print (pcl::console::L_INFO, __VA_ARGS__)
61 #define PCL_DEBUG(...) pcl::console::print (pcl::console::L_DEBUG, __VA_ARGS__)
62 #define PCL_VERBOSE(...) pcl::console::print (pcl::console::L_VERBOSE, __VA_ARGS__)
63 
64 #define PCL_ASSERT_ERROR_PRINT_CHECK(pred, msg) \
65  do \
66  { \
67  if (!(pred)) \
68  { \
69  PCL_ERROR(msg); \
70  PCL_ERROR("In File %s, in line %d\n" __FILE__, __LINE__); \
71  } \
72  } while (0)
73 
74 #define PCL_ASSERT_ERROR_PRINT_RETURN(pred, msg, err) \
75  do \
76  { \
77  PCL_ASSERT_ERROR_PRINT_CHECK(pred, msg); \
78  if (!(pred)) return err; \
79  } while (0)
80 
81 namespace pcl
82 {
83  namespace console
84  {
86  {
87  TT_RESET = 0,
88  TT_BRIGHT = 1,
89  TT_DIM = 2,
91  TT_BLINK = 4,
93  TT_HIDDEN = 8
94  };
95 
96  enum TT_COLORS
97  {
105  TT_WHITE
106  };
107 
109  {
115  L_VERBOSE
116  };
117 
118  /** set the verbosity level */
119  PCL_EXPORTS void
121 
122  /** get the verbosity level. */
125 
126  /** initialize verbosity level. */
127  PCL_EXPORTS bool
129 
130  /** is verbosity level enabled? */
131  PCL_EXPORTS bool
133 
134  /** \brief Enable or disable colored text output, overriding the default behavior.
135  *
136  * By default, colored output is enabled for interactive terminals or when the environment
137  * variable PCL_CLICOLOR_FORCE is set.
138  *
139  * \param stream the output stream (stdout, stderr, etc)
140  * \param enable whether to emit color codes when calling any of the color related methods
141  */
142  PCL_EXPORTS void
143  enableColoredOutput (FILE *stream, bool enable);
144 
145  /** \brief Change the text color (on either stdout or stderr) with an attr:fg:bg
146  * \param stream the output stream (stdout, stderr, etc)
147  * \param attribute the text attribute
148  * \param fg the foreground color
149  * \param bg the background color
150  */
151  PCL_EXPORTS void
152  change_text_color (FILE *stream, int attribute, int fg, int bg);
153 
154  /** \brief Change the text color (on either stdout or stderr) with an attr:fg
155  * \param stream the output stream (stdout, stderr, etc)
156  * \param attribute the text attribute
157  * \param fg the foreground color
158  */
159  PCL_EXPORTS void
160  change_text_color (FILE *stream, int attribute, int fg);
161 
162  /** \brief Reset the text color (on either stdout or stderr) to its original state
163  * \param stream the output stream (stdout, stderr, etc)
164  */
165  PCL_EXPORTS void
166  reset_text_color (FILE *stream);
167 
168  /** \brief Print a message on stream with colors
169  * \param stream the output stream (stdout, stderr, etc)
170  * \param attr the text attribute
171  * \param fg the foreground color
172  * \param format the message
173  */
174  PCL_EXPORTS void
175  print_color (FILE *stream, int attr, int fg, const char *format, ...);
176 
177  /** \brief Print an info message on stream with colors
178  * \param format the message
179  */
180  PCL_EXPORTS void
181  print_info (const char *format, ...);
182 
183  /** \brief Print an info message on stream with colors
184  * \param stream the output stream (stdout, stderr, etc)
185  * \param format the message
186  */
187  PCL_EXPORTS void
188  print_info (FILE *stream, const char *format, ...);
189 
190  /** \brief Print a highlighted info message on stream with colors
191  * \param format the message
192  */
193  PCL_EXPORTS void
194  print_highlight (const char *format, ...);
195 
196  /** \brief Print a highlighted info message on stream with colors
197  * \param stream the output stream (stdout, stderr, etc)
198  * \param format the message
199  */
200  PCL_EXPORTS void
201  print_highlight (FILE *stream, const char *format, ...);
202 
203  /** \brief Print an error message on stream with colors
204  * \param format the message
205  */
206  PCL_EXPORTS void
207  print_error (const char *format, ...);
208 
209  /** \brief Print an error message on stream with colors
210  * \param stream the output stream (stdout, stderr, etc)
211  * \param format the message
212  */
213  PCL_EXPORTS void
214  print_error (FILE *stream, const char *format, ...);
215 
216  /** \brief Print a warning message on stream with colors
217  * \param format the message
218  */
219  PCL_EXPORTS void
220  print_warn (const char *format, ...);
221 
222  /** \brief Print a warning message on stream with colors
223  * \param stream the output stream (stdout, stderr, etc)
224  * \param format the message
225  */
226  PCL_EXPORTS void
227  print_warn (FILE *stream, const char *format, ...);
228 
229  /** \brief Print a debug message on stream with colors
230  * \param format the message
231  */
232  PCL_EXPORTS void
233  print_debug (const char *format, ...);
234 
235  /** \brief Print a debug message on stream with colors
236  * \param stream the output stream (stdout, stderr, etc)
237  * \param format the message
238  */
239  PCL_EXPORTS void
240  print_debug (FILE *stream, const char *format, ...);
241 
242 
243  /** \brief Print a value message on stream with colors
244  * \param format the message
245  */
246  PCL_EXPORTS void
247  print_value (const char *format, ...);
248 
249  /** \brief Print a value message on stream with colors
250  * \param stream the output stream (stdout, stderr, etc)
251  * \param format the message
252  */
253  PCL_EXPORTS void
254  print_value (FILE *stream, const char *format, ...);
255 
256  /** \brief Print a message on stream
257  * \param level the verbosity level
258  * \param stream the output stream (stdout, stderr, etc)
259  * \param format the message
260  */
261  PCL_EXPORTS void
262  print (VERBOSITY_LEVEL level, FILE *stream, const char *format, ...);
263 
264  /** \brief Print a message
265  * \param level the verbosity level
266  * \param format the message
267  */
268  PCL_EXPORTS void
269  print (VERBOSITY_LEVEL level, const char *format, ...);
270  }
271 }
PCL_EXPORTS void enableColoredOutput(FILE *stream, bool enable)
Enable or disable colored text output, overriding the default behavior.
PCL_EXPORTS void print_color(FILE *stream, int attr, int fg, const char *format,...)
Print a message on stream with colors.
PCL_EXPORTS void setVerbosityLevel(VERBOSITY_LEVEL level)
set the verbosity level
PCL_EXPORTS void print_debug(const char *format,...)
Print a debug message on stream with colors.
PCL_EXPORTS void print(VERBOSITY_LEVEL level, FILE *stream, const char *format,...)
Print a message on stream.
PCL_EXPORTS void print_highlight(const char *format,...)
Print a highlighted info message on stream with colors.
PCL_EXPORTS bool isVerbosityLevelEnabled(VERBOSITY_LEVEL severity)
is verbosity level enabled?
PCL_EXPORTS void reset_text_color(FILE *stream)
Reset the text color (on either stdout or stderr) to its original state.
PCL_EXPORTS void print_warn(const char *format,...)
Print a warning message on stream with colors.
PCL_EXPORTS void print_error(const char *format,...)
Print an error message on stream with colors.
TT_ATTIBUTES
Definition: print.h:86
@ TT_HIDDEN
Definition: print.h:93
@ TT_DIM
Definition: print.h:89
@ TT_BLINK
Definition: print.h:91
@ TT_BRIGHT
Definition: print.h:88
@ TT_RESET
Definition: print.h:87
@ TT_UNDERLINE
Definition: print.h:90
@ TT_REVERSE
Definition: print.h:92
VERBOSITY_LEVEL
Definition: print.h:109
@ L_ALWAYS
Definition: print.h:110
@ L_VERBOSE
Definition: print.h:115
PCL_EXPORTS void change_text_color(FILE *stream, int attribute, int fg, int bg)
Change the text color (on either stdout or stderr) with an attr:fg:bg.
@ TT_GREEN
Definition: print.h:100
@ TT_WHITE
Definition: print.h:105
@ TT_BLACK
Definition: print.h:98
@ TT_MAGENTA
Definition: print.h:103
@ TT_RED
Definition: print.h:99
@ TT_YELLOW
Definition: print.h:101
PCL_EXPORTS void print_info(const char *format,...)
Print an info message on stream with colors.
PCL_EXPORTS VERBOSITY_LEVEL getVerbosityLevel()
get the verbosity level.
PCL_EXPORTS void print_value(const char *format,...)
Print a value message on stream with colors.
PCL_EXPORTS bool initVerbosityLevel()
initialize verbosity level.
#define PCL_EXPORTS
Definition: pcl_macros.h:323