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__