链表:Channel类、ChannelHit类均用到了链表数据结构
以Channel类为例
class Channel
{
Channel* next;
}
ChanMgr维护一份Channel的链表,并完成添加、删除、统计等操作。这里用链表而不用数组是考虑到频道频繁的添加删除操作和空间的节省。
其中channel为头指针,添加新频道采用头插法,统计频道数目采用遍历的方法。
class ChannelMgr
{
Channel* channel;
}
int ChanMgr::numChannels()
{
int tot = 0;
Channel *ch = channel;
while (ch)
{
if (ch->isActive())
tot++;
ch = ch->next;
}
return tot;
}
循环队列:ChanPacketBuffer
这里考虑到的是频道数据包是先进先出的机制,即先读入的数据先播放
class ChanPacketBuffer
{
ChanPacket packets[MAX_PACKETS];
volatile unsigned int lastPos,firstPos,safePos;
volatile unsigned int readPos,writePos;
}
树:XML
XML文件的组织本身就是一个树
class XML
{
public:
class Node
{
public:
class Attribute
{
public:
int namePos,valuePos;
};
}
Node *child,*parent,*sibling;
}