1 #ifndef __FASTJET_LIMITEDWARNING_HH__
2 #define __FASTJET_LIMITEDWARNING_HH__
35 #include "fastjet/internal/base.hh"
40 #include "fastjet/config.h"
41 #ifdef FASTJET_HAVE_LIMITED_THREAD_SAFETY
44 #endif // FASTJET_HAVE_LIMITED_THREAD_SAFETY
45 #include "fastjet/internal/thread_safety_helpers.hh"
47 FASTJET_BEGIN_NAMESPACE
61 LimitedWarning(
int max_warn_in) : _max_warn(max_warn_in), _this_warning_summary(0) {}
63 #ifdef FASTJET_HAVE_LIMITED_THREAD_SAFETY
66 : _max_warn(other._max_warn), _this_warning_summary{other._this_warning_summary.load()} {}
71 void warn(
const char * warning) {
warn(warning, _default_ostr);}
75 void warn(
const std::string & warning) {
warn(warning.c_str(), _default_ostr);}
78 void warn(
const char * warning, std::ostream * ostr);
81 void warn(
const std::string & warning, std::ostream * ostr) {
warn(warning.c_str(), ostr);}
92 _max_warn_default = max_warn;
101 int n_warn_so_far()
const;
105 static std::string summary();
110 typedef std::pair<std::string, thread_safety_helpers::AtomicCounter<unsigned int> > Summary;
111 #ifdef FASTJET_HAVE_LIMITED_THREAD_SAFETY
112 static std::atomic<int> _max_warn_default;
113 static std::atomic<std::ostream *> _default_ostr;
114 static std::mutex _global_warnings_summary_mutex;
115 std::atomic<Summary*> _this_warning_summary;
117 static int _max_warn_default;
118 static std::ostream * _default_ostr;
119 Summary* _this_warning_summary;
120 #endif // FASTJET_HAVE_LIMITED_THREAD_SAFETY
125 static std::list< Summary > _global_warnings_summary;
129 FASTJET_END_NAMESPACE
131 #endif // __FASTJET_LIMITEDWARNING_HH__