uvm的callback必须是提供者有预见性的留一些方法在function前后,这样在使用的时候,进行遍历调度即可    

  设计者,需要从uvm_callback定义一个基类,只定义function原型定义一个uvm_callbacks,即pool类型;

      在对象类中使用register_cb宏来注册callbacks;  

  使用者,需要从指定的uvm_callback扩展出一个实现类,并将该类的一个对象add到对应的pool中;

callbacks中有两个参数,一个表示object,一个表示具体的callback,因为一个object可能有多个callback;

typed_callback,中只有一个参数,表示object;

callbacks_base,则通用的定义了一个uvm_pool,m_pool,以object为索引,返回uvm_queue类型的队列;

callbacks_base,从uvm_object继承而来,单实例化设计,其中定义了两个static变量,由于并不是一个参数化的类;

    所以m_b_inst和m_pool在系统中,只有一份;

    

uvm_typed_callbacks从uvm_callbacks_base继承而来,参数化的类,以callback对应的object为参数;

    其中定义了两个参数化的变量;变量m_t_inst,队列m_tw_cb_q;

    所以两个static变量根据paramter的不同会有很多份;

    

uvm_callbacks从uvm_typed_callbacks,继承而来,有两个参数,object和callback,

    其中定义了两个主要的static变量,m_inst,m_base_inst,m_base_inst只与object类型有关;

    所以不同的object和callback,m_inst都还有多份;

    

uvm_register_cb(T,CB)的define;

    

调用了一个uvm_callbacks的function, m_register_pair,并且新定义了一个变量来接收返回值;

1)首先必须在uvm_callback扩展的时候,定义一个uvm_callbacks的class;

  m_register_pair一个static的函数,调用get函数,之后递归调用initial function,实现所有static变量的定义;

      

      

      

2)uvm_typeid得到static的实例化typeid_base的class;

      

3)注册m_typeid和m_cb_typeid的值到uvm_typeid_base的static变量中;一个object的参数化类,一个callback的参数化类;

      m_base_inst中push back所有的m_inst,即callbacks的种类;

      

add function,static类型,将object和相应的callback加到对应的callbacks中;

      首先调用get函数,此时各个inst都不是null,不会执行代码;如果callback为null,报错;

      

      从m_pool中拿到指定object的callback queue;如果为null,新建一个;

      

        如果对应的callback已经加到对应的object的queue中,报warning;否则根据order的类型,进行push操作;

        不同的order顺序,决定了定义同一object的callback的执行顺序;

      

如果add的时候,object的值为null,则将callback加到自己类型的queue中;

      

add_by_name,static function只是在uvm_root中进行find函数调用,查找指定name的comp,在调用add函数;

    找到的comp队列都加入callback;

      

delete函数,static类型,拿到m_pool中的队列,删除相应的callback,找不到相应的callback,报warning;

      

如果delete的时候,传入的object的值为null,则删除该类型中的queue中的callback;

delete_by_name类似。

提供给其他class的static函数 实现;

get_first;先拿到该comp类型的对象(null),或者某个对象的callback队列;

      如果没有add进m_pool中,则也进行add操作;

      

      

get_last,get_prev,get_next,类似,但是需要显示指定itr的值;

使用时也可以调用宏ucm_do_obj_callbacks进行遍历调用;

      

callback源码分析——callbacks的更多相关文章

  1. Zepto源码分析-callbacks模块

    // Zepto.js // (c) 2010-2015 Thomas Fuchs // Zepto.js may be freely distributed under the MIT licens ...

  2. callback源码分析——callback_iter和callback

    uvm_callback_iter,定义了function,first,last,next,prev的函数, 其中定义的还是相应uvm_callbacks的静态函数: 所以之前uvm_callback ...

  3. 读Zepto源码之Callbacks模块

    Callbacks 模块并不是必备的模块,其作用是管理回调函数,为 Defferred 模块提供支持,Defferred 模块又为 Ajax 模块的 promise 风格提供支持,接下来很快就会分析到 ...

  4. zepto源码分析系列

    如果你也开发移动端web,如果你也用zepto,应该值得你看看.有问题请留言. Zepto源码分析-架构 Zepto源码分析-zepto(DOM)模块 Zepto源码分析-callbacks模块 Ze ...

  5. jQuery使用():Callbacks回调函数列表之异步编程(含源码分析)

    Callbacks的基本功能回调函数缓存与调用 特定需求模式的Callbacks Callbacks的模拟源码 一.Callbacks的基本功能回调函数缓存与调用 Callbacks即回调函数集合,在 ...

  6. jQuery 2.0.3 源码分析 回调对象 - Callbacks

    源码API:http://api.jquery.com/jQuery.Callbacks/ jQuery.Callbacks()是在版本1.7中新加入的.它是一个多用途的回调函数列表对象,提供了一种强 ...

  7. requirejs源码分析: requirejs 方法–2. context.require(deps, callback, errback);

    上一篇 requirejs源码分析: requirejs 方法–1. 主入口  中的return context.require(deps, callback, errback);  调用的是make ...

  8. jQuery源码分析系列

    声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://git ...

  9. jQuery实现DOM加载方法源码分析

    传统的判断dom加载的方法 使用 dom0级 onload事件来进行触发所有浏览器都支持在最初是很流行的写法 我们都熟悉这种写法: window.onload=function(){ ... }  但 ...

随机推荐

  1. OpenGL教程和书籍

    1.http://goanna.cs.rmit.edu.au/~gl/teaching/Interactive3D/

  2. oracle基本命令笔记

    最近由于工作原因,再次接触oracle,因此重新来熟知下oracle基本的命令. --改密码 1.运行——键入“cmd” 回车2.键入“sqlplus/nolog” 回车3.键入“conn/as sy ...

  3. 20165225《Java程序设计》第五周学习总结

    20165225<Java程序设计>第五周学习总结 1.视频与课本中的学习: - 第七章学习总结 内部类: 内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方 ...

  4. 20165213&20165225结对学习感想及创意照

    20165213&20165225结对学习感想及创意照 会JAVA的大学生活好小组 团队感悟: 1+1>2还是1+1<2? 上述两个观点实际没有对错之分,取决点在于个人见解. 相信 ...

  5. CF891C Envy 最小生成树/虚树

    正解:最小生成树/虚树 解题报告: 传送门! sd如我就只想到了最暴力的想法,一点儿优化都麻油想到,,,真的菜到爆炸了QAQ 然后就分别港下两个正解QAQ 法一,最小生成树 这个主要是要想到关于最小生 ...

  6. 10.8-uC/OS-III内部任务(中断处理任务 OS_IntQTask())

    1.当设置OS_CFG.H中的OS_CFG_ISR_POST_DEFERRED_EN为1时, uC/OS-III就会创建一个任务,它的作用是尽快完成ISR中对post函数的调用, 将信号量.消息等对象 ...

  7. what's the python之python介绍

    其实这一篇文章的大部分都是啰嗦话,大部分在百度百科中都有详尽的叙述.既然决定学python了就要风雨兼程,你不用洞悉python到底是什么,你只要知道这是一门编程语言,跟Java.C++等语言一样都是 ...

  8. SQL 流水账余额查询

    创建表 CREATE TABLE [dbo].[test]( ,) NOT NULL, [RQ] [date] NULL, [SR] [int] NULL, [ZC] [int] NULL ) ON ...

  9. Linux Shell的18条常用命令整理

    1.   ls: 类似于dos下的dir命令 ls最常用的参数有三个:-a -l -F. ls –a Linux上的文件以.开头的文件被系统视为隐藏文件,仅用ls命令是看不到他们的,而用ls -a除了 ...

  10. nginx 启动报错403

    nginx 安装完成以后启动的时候报403, 网上找的答案是在配置文件nginx.conf里面加上 user root owner;这个要加在配置文件的第一行才行,否则还是会报错,配置文件截图为: 参 ...