00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef ICBMCOOKIECACHE_H
00023 #define ICBMCOOKIECACHE_H
00024
00025 #include <libicq2000/Cache.h>
00026 #include <libicq2000/ICBMCookie.h>
00027 #include <libicq2000/events.h>
00028
00029 #include <sigc++/signal_system.h>
00030
00031 using SigC::Signal1;
00032
00033 namespace ICQ2000 {
00034
00035 class ICBMCookieCache : public Cache<ICBMCookie, MessageEvent*> {
00036 public:
00037 ICBMCookieCache() { }
00038
00039 void removeItem(const ICBMCookieCache::literator& l) {
00040 delete ((*l).getValue());
00041 Cache<ICBMCookie, MessageEvent*>::removeItem(l);
00042 }
00043
00044 void expireItem(const ICBMCookieCache::literator& l) {
00045 expired.emit( (*l).getValue() );
00046 Cache<ICBMCookie, MessageEvent*>::expireItem(l);
00047 }
00048
00049 ICBMCookie generateUnique() const {
00050 ICBMCookie c;
00051 c.generate();
00052 while (exists(c)) c.generate();
00053 return c;
00054 }
00055
00056 void removeContact(Contact *c) {
00057 literator curr = m_list.begin();
00058 literator next = curr;
00059 while ( curr != m_list.end() ) {
00060 ++next;
00061 MessageEvent *ev = (*curr).getValue();
00062 if ( ev->getContact() == c ) removeItem(curr);
00063 curr = next;
00064 }
00065 }
00066
00067 Signal1<void,MessageEvent*> expired;
00068
00069 };
00070 }
00071
00072 #endif