Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

MessageList.cpp

Go to the documentation of this file.
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 }

Generated on Tue Apr 9 13:53:07 2002 for RWIL - Real World Interface Library by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001