00001 /* 00002 Free Download Manager Copyright (c) 2003-2007 FreeDownloadManager.ORG 00003 */ 00004 00005 00006 00007 00008 #include "libtorrent/alert.hpp" 00009 00010 namespace libtorrent { 00011 00012 alert::alert(severity_t severity, const std::string& msg) 00013 : m_msg(msg) 00014 , m_severity(severity) 00015 , m_timestamp(boost::posix_time::second_clock::universal_time()) 00016 { 00017 } 00018 00019 alert::~alert() 00020 { 00021 } 00022 00023 boost::posix_time::ptime alert::timestamp() const 00024 { 00025 return m_timestamp; 00026 } 00027 00028 const std::string& alert::msg() const 00029 { 00030 return m_msg; 00031 } 00032 00033 alert::severity_t alert::severity() const 00034 { 00035 return m_severity; 00036 } 00037 00038 alert_manager::alert_manager() 00039 : m_severity(alert::none) 00040 {} 00041 00042 alert_manager::~alert_manager() 00043 { 00044 while (!m_alerts.empty()) 00045 { 00046 delete m_alerts.front(); 00047 m_alerts.pop(); 00048 } 00049 } 00050 00051 void alert_manager::post_alert(const alert& alert_) 00052 { 00053 boost::mutex::scoped_lock lock(m_mutex); 00054 if (m_severity > alert_.severity()) return; 00055 00056 00057 if (m_alerts.size() == 100) 00058 { 00059 alert* result = m_alerts.front(); 00060 m_alerts.pop(); 00061 delete result; 00062 } 00063 m_alerts.push(alert_.clone().release()); 00064 } 00065 00066 std::auto_ptr<alert> alert_manager::get() 00067 { 00068 boost::mutex::scoped_lock lock(m_mutex); 00069 00070 assert(!m_alerts.empty()); 00071 00072 alert* result = m_alerts.front(); 00073 m_alerts.pop(); 00074 return std::auto_ptr<alert>(result); 00075 } 00076 00077 bool alert_manager::pending() const 00078 { 00079 boost::mutex::scoped_lock lock(m_mutex); 00080 00081 return !m_alerts.empty(); 00082 } 00083 00084 void alert_manager::set_severity(alert::severity_t severity) 00085 { 00086 boost::mutex::scoped_lock lock(m_mutex); 00087 00088 m_severity = severity; 00089 } 00090 00091 bool alert_manager::should_post(alert::severity_t severity) const 00092 { 00093 return severity >= m_severity; 00094 } 00095 00096 } 00097
1.5.6