5 HandlerIterator处理程序迭代器类——Live555源码阅读(一)基本组件类

本文解析了Live555源码中的时间类、延时队列类、处理程序描述类及哈希表类等内容,重点介绍了HandlerIterator类及其在处理程序描述链表中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类。

本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso

HandlerIterator处理程序迭代器类

这里本应该先介绍HandlerDescriptor类的,因为这个类与它的关联比较大,就先介绍这个类。
HandlerIterator是一个迭代器类,其有两个数据成员,分别是HandlerSet类对象的引用fOurSet,以及一个HandlerDescriptor对象指针fNextPtr。并且HandlerIterator同时是节点和链表的友元类。
fOurSet是一个引用,就说明了HandlerIterator的初始化必须要绑定一个HandlerSet对象。而HandlerSet类的对象又是一个链表,其节点是HandlerDescriptor对象。迭代器对象仅在HandlerSet类中使用。
迭代器构造的时候,会将其fNextPtr指向链表的头节点的下一个。

HandlerIterator_class_uml
240923253301951.png

HandlerIterator_2.png
240923376897840.png

下面是HandlerIterator类定义

// 处理程序描述链表迭代器类
class HandlerIterator {
public:
    // 必须绑定到一个处理程序描述链表对象,并调用reset()将fNextPtr赋值为handlerSet.fNextHandler
    HandlerIterator(HandlerSet& handlerSet);
    virtual ~HandlerIterator();

    // 返回fNextPtr,并将fNextPtr指向下一个处理程序描述对象
    HandlerDescriptor* next(); // returns NULL if none
    void reset();   //将 fNextPtr 指向链表的头结点的下一个
private:
    HandlerSet& fOurSet;            //指向绑定链表的引用
    HandlerDescriptor* fNextPtr;    //处理程序描述对象指针
};

next方法(获取链表节点,迭代器后移)

这里返回的是当前迭代器指向的元素,但是迭代器会走向下一个。如果走到了末尾元素位置,迭代器将不会循环到第一个,而是停滞不前,并返回NULL。

HandlerDescriptor* HandlerIterator::next() {
    HandlerDescriptor* result = fNextPtr;
    //要注意的是,这里是走到了最后一个,因为这是循环链表
    if (result == &fOurSet.fHandlers) { // no more
        result = NULL;
    }
    else {
        fNextPtr = fNextPtr->fNextHandler;
    }

    return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值