IMP  2.2.0
The Integrative Modeling Platform
base/WarningContext.h
Go to the documentation of this file.
1 /**
2  * \file IMP/base/WarningContext.h
3  * \brief Logging and error reporting support.
4  *
5  * Copyright 2007-2014 IMP Inventors. All rights reserved.
6  *
7  */
8 
9 #ifndef IMPBASE_CREATE_WARNING_CONTEXT_H
10 #define IMPBASE_CREATE_WARNING_CONTEXT_H
11 
12 #include <IMP/base/base_config.h>
13 #include "showable_macros.h"
14 #include <boost/unordered_set.hpp>
15 
16 IMPBASE_BEGIN_NAMESPACE
17 #if IMP_HAS_LOG
18 /** Warnings with the same key within the context are only output once.*/
19 struct IMPBASEEXPORT WarningContext {
20  mutable boost::unordered_set<std::string> data_;
21 
22  public:
23  void add_warning(std::string key, std::string warning) const;
24  void clear_warnings() const;
25  void dump_warnings() const;
26  ~WarningContext();
27  IMP_SHOWABLE_INLINE(WarningContext, out << data_.size() << " warnings");
28 };
29 #else
30 struct IMPBASEEXPORT WarningContext {
31  public:
33  void add_warning(std::string, std::string) const {}
34  void clear_warnings() const {}
35  void dump_warnings() const {}
36  void show(std::ostream &) const {}
37 };
38 #endif
39 
40 IMPBASE_END_NAMESPACE
41 
42 #endif /* IMPBASE_CREATE_WARNING_CONTEXT_H */
#define IMP_SHOWABLE_INLINE(Name, how_to_show)
Declare the methods needed by an object that can be printed.
void show(Hierarchy h, std::ostream &out=std::cout)
Print out a molecular hierarchy.
Various general useful macros for IMP.