6 #include "teca_config.h"
69 std::ostream &
operator<<(std::ostream &os,
const std::vector<T> &vec)
74 size_t n = vec.size();
75 for (
size_t i = 1; i < n; ++i)
83 std::ostream &
operator<<(std::ostream &os,
const std::vector<std::string> &vec);
86 template <
typename T,
size_t N>
88 std::ostream &
operator<<(std::ostream &os,
const std::array<T,N> &vec)
93 for (
size_t i = 1; i < N; ++i)
102 template <
typename num_t,
int len,
103 typename =
typename std::enable_if<!std::is_same<num_t,char>::value,
bool>::type>
105 std::ostream &
operator<<(std::ostream &os,
const num_t (&
data)[len])
108 for (
int i = 1; i < len; ++i)
109 os <<
", " <<
data[i];
120 #define ANSI_RED "\033[1;31;40m"
121 #define ANSI_GREEN "\033[1;32;40m"
122 #define ANSI_YELLOW "\033[1;33;40m"
123 #define ANSI_WHITE "\033[1;37;40m"
124 #define ANSI_OFF "\033[0m"
126 #define BEGIN_HL(_color) (have_tty()?_color:"")
127 #define END_HL (have_tty()?ANSI_OFF:"")
135 #define TECA_MESSAGE(_strm, _head, _head_color, _msg) \
137 << BEGIN_HL(_head_color) << _head << END_HL \
138 << " " << teca_parallel_id() << " [" << __FILE__ << ":" << __LINE__ \
139 << " " << TECA_VERSION_DESCR << "]" << std::endl \
140 << BEGIN_HL(_head_color) << _head << END_HL << " " \
141 << BEGIN_HL(ANSI_WHITE) << "" _msg << END_HL << std::endl;
144 #define TECA_MESSAGE_RAW(_strm, _head, _msg) \
146 << _head << " " << teca_parallel_id() << " [" << __FILE__ \
147 << ":" << __LINE__ << " " << TECA_VERSION_DESCR << "]" << std::endl \
148 << _head << " " << "" _msg << std::endl;
153 #define TECA_FATAL_ERROR(_msg) \
155 std::ostringstream ess; \
156 TECA_MESSAGE(ess, "ERROR:", ANSI_RED, _msg) \
157 teca_error::error_handler(ess.str().c_str()); \
161 #define TECA_ERROR(_msg) TECA_MESSAGE(std::cerr, "ERROR:", ANSI_RED, _msg)
164 #define TECA_WARNING(_msg) TECA_MESSAGE(std::cerr, "WARNING:", ANSI_YELLOW, _msg)
167 #define TECA_STATUS(_msg) TECA_MESSAGE(std::cerr, "STATUS:", ANSI_GREEN, _msg)
global error handling hooks
Definition: teca_common.h:24
TECA_EXPORT void set_error_message_abort_handler()
Install the teca_error::error_message_abort error handler.
TECA_EXPORT void set_error_message_handler()
Install the teca_error::error_message error handler.
TECA_EXPORT void error_message(const char *msg)
p_teca_error_handler error_handler TECA_EXPORT
The global error handler instance.
TECA_EXPORT void set_error_handler(p_teca_error_handler handler)
TECA_EXPORT void error_message_abort(const char *msg)
auto data(V &&... args)
Definition: teca_variant_array_util.h:255
TECA_EXPORT std::ostream & operator<<(std::ostream &os, const teca_calendar_util::time_point &tpt)
send the time_point to a stream in humnan readable form
void(*)(const char *) p_teca_error_handler
Definition: teca_common.h:20