zoukankan      html  css  js  c++  java
  • 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类定义

    // 处理程序描述链表迭代器类
    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;
    }
    
  • 相关阅读:
    利用委托传值
    引用类型的默认值为Null
    字符串加密与解密 (MD5)
    讲解Guitar Pro如何显示吉他面板功能
    Guitar Pro 7 常见问题之版本更新
    Guitar Pro7常见问题之滑音的讲解
    Guitar Pro 7如何新建吉他谱步骤
    带你演绎Guitar Pro 7制作吉他谱前的步骤
    如何添加音效使乐曲更加丰富?
    Guitar Pro 吉他软件功能介绍
  • 原文地址:https://www.cnblogs.com/oloroso/p/4596833.html
Copyright © 2011-2022 走看看