5 HandlerIterator处理程序迭代器类——Live555源码阅读(一)基本组件类
2015-06-24 09:24
603 查看
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类。
本文由乌合之众 lym瞎编,欢迎转载
HandlerIterator是一个迭代器类,其有两个数据成员,分别是HandlerSet类对象的引用fOurSet,以及一个HandlerDescriptor对象指针fNextPtr。并且HandlerIterator同时是节点和链表的友元类。
fOurSet是一个引用,就说明了HandlerIterator的初始化必须要绑定一个HandlerSet对象。而HandlerSet类的对象又是一个链表,其节点是HandlerDescriptor对象。迭代器对象仅在HandlerSet类中使用。
迭代器构造的时候,会将其fNextPtr指向链表的头节点的下一个。
本文由乌合之众 lym瞎编,欢迎转载
my.oschina.net/oloroso
HandlerIterator处理程序迭代器类
这里本应该先介绍HandlerDescriptor类的,因为这个类与它的关联比较大,就先介绍这个类。HandlerIterator是一个迭代器类,其有两个数据成员,分别是HandlerSet类对象的引用fOurSet,以及一个HandlerDescriptor对象指针fNextPtr。并且HandlerIterator同时是节点和链表的友元类。
fOurSet是一个引用,就说明了HandlerIterator的初始化必须要绑定一个HandlerSet对象。而HandlerSet类的对象又是一个链表,其节点是HandlerDescriptor对象。迭代器对象仅在HandlerSet类中使用。
迭代器构造的时候,会将其fNextPtr指向链表的头节点的下一个。
下面是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; }
相关文章推荐
- 为何某些公司不允许使用C++ STL?
- nginx+php-fpm出现502 bad gateway错误解决方法
- 【CUDA并行编程之六】KNN算法的并行实现
- YTU-OJ-虚基类练习:动物
- 一段绑定DC和hbitmap然后刷完DC后保存图像
- MSBuild 常用命令(Copy,Zip)
- 4 Handler相关类——Live555源码阅读(一)基本组件类
- PHP-FPM参数优化
- Nginx使用的php-fpm的两种进程管理方式及优化
- Lua学习一
- YTU-OJ-投简历
- UE4项目学习——2D跑酷游戏尝试(蓝图脚本)1
- C++为什么不加入垃圾回收机制
- Flash Builder找不到所需的调试器版本
- 网站
- http请求方式httpURLContention和httpClient
- php-fpm - 启动参数及重要配置详解
- JSON 语法
- iOS 设计模式系列:开篇
- 【CUDA并行编程之五】计算向量的欧式距离