1
/*! \file lib/clipper_message.h
2
Header file for clipper message handler
4
//C Copyright (C) 2000-2006 Kevin Cowtan and University of York
6
//L This library is free software and is distributed under the terms
7
//L and conditions of version 2.1 of the GNU Lesser General Public
8
//L Licence (LGPL) with the following additional clause:
10
//L `You may also combine or link a "work that uses the Library" to
11
//L produce a work containing portions of the Library, and distribute
12
//L that work under terms of your choice, provided that you give
13
//L prominent notice with each copy of the work that the specified
14
//L version of the Library is used in it, and that you include or
15
//L provide public access to the complete corresponding
16
//L machine-readable source code for the Library including whatever
17
//L changes were used in the work. (i.e. If you make changes to the
18
//L Library you must distribute those, but you do not need to
19
//L distribute source or object code to those portions of the work
20
//L not covered by this licence.)'
22
//L Note that this clause grants an additional right and does not impose
23
//L any additional restriction, and so does not affect compatibility
24
//L with the GNU General Public Licence (GPL). If you wish to negotiate
25
//L other terms, please contact the maintainer.
27
//L You can redistribute it and/or modify the library under the terms of
28
//L the GNU Lesser General Public License as published by the Free Software
29
//L Foundation; either version 2.1 of the License, or (at your option) any
32
//L This library is distributed in the hope that it will be useful, but
33
//L WITHOUT ANY WARRANTY; without even the implied warranty of
34
//L MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
35
//L Lesser General Public License for more details.
37
//L You should have received a copy of the CCP4 licence and/or GNU
38
//L Lesser General Public License along with this library; if not, write
39
//L to the CCP4 Secretary, Daresbury Laboratory, Warrington WA4 4AD, UK.
40
//L The GNU Lesser General Public can also be obtained by writing to the
41
//L Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
45
#ifndef CLIPPER_MESSAGE
46
#define CLIPPER_MESSAGE
56
//! Message handler class
57
/*! The message handler is a static class which handles messages and
58
errors. It has 3 properties:
59
- the output stream: to which messages will be directed (default stderr)
60
- message level: messages with a level >= this will be output (default 5)
61
- fatal level: messages with a level >= this will be fatal (default 9)
63
Levels may be in the range 1-9. They are priorotised as follows:
64
- 1-4 messages, never fatal
65
- 5-8 warning, may be fatal
67
The fatal level must be greater than or equal to the message
68
level, and greater than or equal to 5.
70
A message is any object which implements the following methods:
72
const std::string& text() const;
75
The level method may be static.
76
Messages are usually derived from Message_base. */
79
Message(); //!< null constuctor
80
//! return the current stream
81
static std::ostream& stream() { return *stream_; }
82
//! return the current message level
83
static const int& message_level() { return message_level_; }
84
//! return the current fatal error level
85
static const int& fatal_level() { return fatal_level_; }
86
//! set the output stream
87
static void set_stream( std::ostream& stream );
88
//! set the current message level
89
static void set_message_level( const int& level );
90
//! set the current fatal error level
91
static void set_fatal_level( const int& level );
93
template<class T> inline static void message( const T& message )
95
if ( message.level() >= Message::message_level() ) {
96
Message::stream() << message.text() << "\n";
97
if ( message.level() >= Message::fatal_level() ) throw message;
101
static int message_level_;
102
static int fatal_level_;
103
static std::ostream* stream_;
107
//! Base type for messages
110
const std::string& text() const;
117
class Message_generic : public Message_base {
119
Message_generic( const int& level, const std::string& text ) :
120
text_( text ), level_( level ) {}
121
const std::string& text() const { return text_; }
122
const int& level() const { return level_; }
128
//! Fatal message (level = 9)
129
class Message_fatal : public Message_base {
131
Message_fatal( const std::string& text ) : text_( text ) {}
132
const std::string& text() const { return text_; }
133
static int level() { return 9; }
138
//! Warning message (level = 5)
139
class Message_warn : public Message_base {
141
Message_warn( const std::string& text ) : text_( text ) {}
142
const std::string& text() const { return text_; }
143
static int level() { return 5; }
148
//! Info message (level = 1)
149
class Message_info : public Message_base {
151
Message_info( const std::string& text ) : text_( text ) {}
152
const std::string& text() const { return text_; }
153
static int level() { return 1; }
158
//! Constructor message (level = 2)
159
class Message_ctor : public Message_base {
161
Message_ctor( const std::string& text ) : text_( "+"+text ) {}
162
const std::string& text() const { return text_; }
163
static int level() { return 2; }
168
//! Destructor message (level = 2)
169
class Message_dtor : public Message_base {
171
Message_dtor( const std::string& text ) : text_( "-"+text ) {}
172
const std::string& text() const { return text_; }
173
static int level() { return 2; }
179
} // namespace clipper