当前页面链接:https://www.cnblogs.com/oloroso/p/4596833.html

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

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

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

HandlerIterator处理程序迭代器类#

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

HandlerIterator_class_uml

HandlerIterator_2.png

下面是HandlerIterator类定义#

Copy Highlighter-hljs
// 处理程序描述链表迭代器类
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。

Copy Highlighter-hljs
HandlerDescriptor* HandlerIterator::next() {
HandlerDescriptor* result = fNextPtr;
//要注意的是,这里是走到了最后一个,因为这是循环链表
if (result == &fOurSet.fHandlers) { // no more
result = NULL;
}
else {
fNextPtr = fNextPtr->fNextHandler;
}
return result;
}
posted @   乌合之众  阅读(771)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
clear
点击右上角即可分享
微信分享提示
CONTENTS