event.cpp
来自「ABis无线接口全套资料」· C++ 代码 · 共 188 行
CPP
188 行
/* ======================================================================== *\
|
|
| JOYIT Communication Technology
| Copyright (C) 2002-2003, All Right Reserved.
|
| System: Programmable Signaling Gateway
| Sub-system: PSG
| Filename: event.cpp
| Environment: Red Hat Linux 9.0 & GNU C/C++ Compiler 3.2.2
| Function description: Define the menthod of event class.
|
|
\* ======================================================================== */
#ifndef _EVENT_HPP
#include "event.hpp"
#endif
# include "stdio.h"
extern "C" {
#ifndef _STRING_H
#include <string.h>
#endif
};
EventQueueType::EventQueueType( ) : head(NULL), tail(NULL), evCount(0),
capacity(MAXEVENT)
{
}
EventQueueType::EventQueueType(short cap) : head(NULL), tail(NULL), evCount(0),
capacity(MAXEVENT)
{
if (cap > 0)
capacity = cap;
// Otherwise, it will keep the default value.
}
EventQueueType::~EventQueueType( )
{ // destroy all event and it's message.
Clear( );
}
void EventQueueType::Clear( )
{
while (head != NULL)
{
WEvent * tmpC = head->next;
delete head->msgPtr;
delete head;
head = tmpC;
}
tail = head;
evCount = 0;
}
short EventQueueType::getCapacity( )
{
return capacity;
}
void EventQueueType::setCapacity(short cap)
{
if (cap > 0)
capacity = cap;
}
char EventQueueType::insertEvent(const WEvent& event)
{
if (! event.what) // Null event.
return EV_NULL;
if (evCount >= capacity)
return EV_QFULL; // event queue is full, couldn't insert event more
WEvent * ev = new WEvent;
if (NULL == ev)
{ // Exception handle here.
return EV_OUTMEM;
}
else
{
memcpy(ev, &event, sizeof(WEvent));
if (ev->msgLen > 0)
{
ev->msgPtr = new char [ev->msgLen];
if (NULL == ev->msgPtr)
{ // Exception handle here.
delete ev;
return EV_OUTMEM;
}
else
memcpy(ev->msgPtr, event.msgPtr, ev->msgLen);
}
ev->next = head;
if (NULL == head)
{
tail = ev;
head = tail;
}
else
head = ev;
P_ev( );
return EV_QINSERT; // event inserted successful.
}
}
char EventQueueType::pushEvent(const WEvent& event)
{
if (! event.what) // Null event.
return EV_NULL;
if (evCount >= capacity)
return EV_QFULL; // event queue is full, couldn't insert event more
WEvent * ev = new WEvent;
if (NULL == ev)
{ // Exception handle here.
return EV_OUTMEM;
}
else
{
memcpy(ev, &event, sizeof(WEvent));
if (ev->msgLen > 0)
{
ev->msgPtr = new char [ev->msgLen];
if (NULL == ev->msgPtr)
{ // Exception handle here.
delete ev;
return EV_OUTMEM;
}
else
memcpy(ev->msgPtr, event.msgPtr, ev->msgLen);
}
ev->next = NULL;
if (NULL == head)
{
tail = ev;
head = tail;
}
else
{
tail->next = ev;
tail = tail->next;
}
P_ev( );
return EV_QINSERT; // event inserted successful.
}
}
void EventQueueType::popEvent(WEvent& event)
{
if (NULL == head)
{
event.what = evNothing;
return;
}
WEvent * ev = head;
memcpy(&event, ev, sizeof(WEvent));
head = ev->next;
delete ev;
V_ev( );
if (NULL == head)
tail = NULL;
}
// Public event queue manager, all other module access this object to
// put event and get event.
EventQueueType systemEventQueue;
// ------------------------------------------------------------------------
//
// Revision list.
// ==============
//
// 1.0, 2003-04-18, Wu jianjin
// Initial version.
//
// ------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?