reSIProcate/stack  9694
Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes
resip::CancelableTimerQueue< T > Class Template Reference

#include <CancelableTimerQueue.hxx>

List of all members.

Public Types

typedef long Id

Public Member Functions

 CancelableTimerQueue ()
 ~CancelableTimerQueue ()
Id addRelative (T msg, unsigned int offset)
bool cancel (Id id)
int getTimeout () const
bool available () const
getNext ()
void clear ()
bool empty () const
size_t size () const

Private Types

typedef std::multimap< UInt64,
std::pair< T, Id > > 
TimerMap
typedef HashMap< Id, UInt64IdToTimer

Private Member Functions

Id addTimer (T msg, UInt64 expiry)
Id getNextId ()

Private Attributes

Id mNextId
IdToTimer mIdToTimer
TimerMap mTimerMap

Detailed Description

template<class T>
class resip::CancelableTimerQueue< T >

Definition at line 18 of file CancelableTimerQueue.hxx.


Member Typedef Documentation

template<class T>
typedef long resip::CancelableTimerQueue< T >::Id

Definition at line 22 of file CancelableTimerQueue.hxx.

template<class T>
typedef HashMap<Id, UInt64> resip::CancelableTimerQueue< T >::IdToTimer [private]

Definition at line 27 of file CancelableTimerQueue.hxx.

template<class T>
typedef std::multimap< UInt64, std::pair<T, Id> > resip::CancelableTimerQueue< T >::TimerMap [private]

Definition at line 26 of file CancelableTimerQueue.hxx.


Constructor & Destructor Documentation

template<class T>
resip::CancelableTimerQueue< T >::CancelableTimerQueue ( ) [inline]

Definition at line 21 of file CancelableTimerQueue.hxx.

: mNextId(0) {};
template<class T>
resip::CancelableTimerQueue< T >::~CancelableTimerQueue ( ) [inline]

Definition at line 22 of file CancelableTimerQueue.hxx.

{};

Member Function Documentation

template<class T>
Id resip::CancelableTimerQueue< T >::addRelative ( msg,
unsigned int  offset 
) [inline]

Definition at line 30 of file CancelableTimerQueue.hxx.

References resip::Timer::getTimeMs().

      {
         return addTimer(msg, resip::Timer::getTimeMs() + offset);
      }

Here is the call graph for this function:

template<class T>
Id resip::CancelableTimerQueue< T >::addTimer ( msg,
UInt64  expiry 
) [inline, private]

Definition at line 123 of file CancelableTimerQueue.hxx.

      {
         Id id = getNextId();
         mTimerMap.insert(std::make_pair(expiry, std::make_pair(msg, id)));
         mIdToTimer[id] = expiry;
         assert(mIdToTimer.size() == mTimerMap.size());
         return id;
      }
template<class T>
bool resip::CancelableTimerQueue< T >::available ( ) const [inline]

Definition at line 82 of file CancelableTimerQueue.hxx.

References resip::Timer::getTimeMs().

      {
         return (!mTimerMap.empty() && 
                 mTimerMap.begin()->first <= resip::Timer::getTimeMs());
      }

Here is the call graph for this function:

template<class T>
bool resip::CancelableTimerQueue< T >::cancel ( Id  id) [inline]

Definition at line 37 of file CancelableTimerQueue.hxx.

      {
         typename IdToTimer::iterator j = mIdToTimer.find(id);
         if (j == mIdToTimer.end())
         {
            return false;
         }
         
         for (typename TimerMap::iterator i = mTimerMap.lower_bound(j->second); i != mTimerMap.upper_bound(j->second); i++)
         {
            if (i->second.second == id)
            {
               mTimerMap.erase(i);
               mIdToTimer.erase(j);
               return true;
            }
         }
         //cerr << "mIdToTimer: " << Inserter(mIdToTimer) << endl;
         //cerr << "Searching for ID: " << id << endl;
         //cerr << "TimerMap state: " << Inserter(mTimerMap) << endl;
         assert(mIdToTimer.size() == mTimerMap.size());
         assert(0);
      }
template<class T>
void resip::CancelableTimerQueue< T >::clear ( void  ) [inline]

Definition at line 105 of file CancelableTimerQueue.hxx.

      {
         mTimerMap.clear();
         mIdToTimer.clear();
      }
template<class T>
bool resip::CancelableTimerQueue< T >::empty ( ) const [inline]

Definition at line 111 of file CancelableTimerQueue.hxx.

      {
         return mTimerMap.empty();
      }
template<class T>
T resip::CancelableTimerQueue< T >::getNext ( ) [inline]

Definition at line 88 of file CancelableTimerQueue.hxx.

      {
         assert(mIdToTimer.size() == mTimerMap.size());

         assert(available());

         typename TimerMap::iterator it = mTimerMap.begin();
         mIdToTimer.erase(it->second.second);

         T msg = it->second.first;
         mTimerMap.erase(it);

         assert(mIdToTimer.size() == mTimerMap.size());
         
         return msg;
      }
template<class T>
Id resip::CancelableTimerQueue< T >::getNextId ( ) [inline, private]

Definition at line 132 of file CancelableTimerQueue.hxx.

      {
         mNextId++;
         if (mNextId == INT_MAX)
         {
            mNextId = 1;
         }
         return mNextId;
      }
template<class T>
int resip::CancelableTimerQueue< T >::getTimeout ( ) const [inline]

Definition at line 63 of file CancelableTimerQueue.hxx.

References resip::Timer::getTimeMs().

      {
         if (mTimerMap.empty())
         {
            return -1;
         }
         else
         {
            if (mTimerMap.begin()->first - resip::Timer::getTimeMs() < 0)
            {
               return 0;
            }
            else
            {
               return mTimerMap.begin()->first - resip::Timer::getTimeMs();
            }
         }
      }

Here is the call graph for this function:

template<class T>
size_t resip::CancelableTimerQueue< T >::size ( ) const [inline]

Definition at line 116 of file CancelableTimerQueue.hxx.

      {
         return mTimerMap.size();
      }

Member Data Documentation

template<class T>
IdToTimer resip::CancelableTimerQueue< T >::mIdToTimer [private]

Definition at line 143 of file CancelableTimerQueue.hxx.

template<class T>
Id resip::CancelableTimerQueue< T >::mNextId [private]

Definition at line 142 of file CancelableTimerQueue.hxx.

template<class T>
TimerMap resip::CancelableTimerQueue< T >::mTimerMap [private]

Definition at line 144 of file CancelableTimerQueue.hxx.


The documentation for this class was generated from the following file: