00001 #include "MessageList.h" 00002 #include <stdio.h> 00003 namespace rwil { 00004 void MessageList::Add(const Message& msg) 00005 { 00006 list<Message> lst; 00007 00008 lst.push_back(msg); 00009 Add(lst); 00010 } 00011 void MessageList::Add(list<Message>& messages) 00012 { 00013 if(m_addcallback) 00014 m_addcallback(messages); 00015 ScopedMutex scope(m_op); 00016 messages.sort(); 00017 m_messages.merge(messages); 00018 m_count.Signal(); 00019 } 00020 00021 void MessageList::SetAddCallback(rwil_MessageList_AddCallback_t callback) 00022 { 00023 m_addcallback = callback; 00024 } 00025 list<Message *> MessageList::Query(time_t start, time_t end) 00026 { 00027 ScopedMutex scope(m_op); 00028 list<Message>::iterator iter; 00029 list<Message *> retval; 00030 00031 iter = m_messages.begin(); 00032 while(iter != m_messages.end()) 00033 { 00034 time_t when = (*iter).GetWhen(); 00035 if((when >= start) && ( when <=end)) 00036 { 00037 retval.push_back(&(*iter)); 00038 } 00039 00040 iter++; 00041 } 00042 return retval; 00043 } 00044 00045 list<Message *> MessageList::Query(std::string paramname, std::string value) 00046 { 00047 ScopedMutex scope(m_op); 00048 list<Message>::iterator iter; 00049 list<Message *> retval; 00050 00051 iter = m_messages.begin(); 00052 00053 while(iter != m_messages.end()) 00054 { 00055 if((*iter).GetParam(paramname) == value) 00056 { 00057 retval.push_back(&(*iter)); 00058 } 00059 iter++; 00060 } 00061 return retval; 00062 } 00063 00064 00065 void MessageList::Destroy(list<Message*> messages) 00066 { 00067 ScopedMutex scope(m_op); 00068 list<Message *>::iterator piter; 00069 list<Message>::iterator miter; 00070 piter = messages.begin(); 00071 while(piter != messages.end()) 00072 { 00073 miter = m_messages.begin(); 00074 while(miter != m_messages.end()) 00075 { 00076 if(&(*miter) == *piter) 00077 { 00078 m_messages.erase(miter); 00079 break; 00080 } 00081 } 00082 piter++; 00083 } 00084 } 00085 00086 void MessageList::Lock() 00087 { 00088 m_lock.Wait(); 00089 } 00090 void MessageList::Release() 00091 { 00092 m_lock.Release(); 00093 } 00094 00095 bool MessageList::Wait(int milli) 00096 { 00097 return m_count.Wait(milli); 00098 } 00099 00100 void MessageList::Wait() 00101 { 00102 return m_count.Wait(); 00103 } 00104 }