Esempio n. 1
0
void EnQ(int element)
{
    if(IsQFull()) {
        return;
    }

    /* Enque element */
    if (f == -1)
        f = 0;
    if (r==MAX-1) {
        r = 0;
        Q[r] = element;
    } else {
        r++;
        Q[r] = element;
    }

}
bool HTTPSourceMMIExtensionEventHandler::HTTPMMIEventQManager<T>::Enqueue
(
 const T& eventToWrite
)
{
  bool bOk = false;

  //Check if the queue is already full, if not push the new event
  //into the queue
  if (IsQFull())
  {
    QTV_MSG_PRIO( QTVDIAG_STREAMING, QTVDIAG_PRIO_MEDIUM,
                  "MMIEventQManager - MMI event queue full" );
  }
  else
  {
    (void)MM_CriticalSection_Enter(m_hEventQLock);
    if (m_nEventWriteIndex < ARR_SIZE(m_eventQ))
    {
      //Update the write index and number of queued events
      bOk = true;
      m_eventQ[m_nEventWriteIndex] = eventToWrite;
      m_nOutstandingEvents++;
      QTV_MSG_PRIO2( QTVDIAG_STREAMING, QTVDIAG_PRIO_MEDIUM,
                     "MMIEventQManager - Queued event to index %u, "
                     "%u events remain", m_nEventReadIndex, m_nOutstandingEvents );
      m_nEventWriteIndex = (m_nEventWriteIndex + 1) % (uint32)ARR_SIZE(m_eventQ);
    }
    else
    {
      QTV_MSG_PRIO1( QTVDIAG_STREAMING, QTVDIAG_PRIO_ERROR,
                     "MMIEventQManager - Invalid MMI event queue write index %u",
                     m_nEventWriteIndex );
    }
    (void)MM_CriticalSection_Leave(m_hEventQLock);
  }

  return bOk;
}