factory源码分析——component_registry和object_registry

Posted _9_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了factory源码分析——component_registry和object_registry相关的知识,希望对你有一定的参考价值。

registry类主要是为object和component提供一个轻量级的代理(lightweight proxy)来方便factory实现;

registry class从uvm_object_wrapper继承而来

 

uvm_object_wrapper是一个virtual class,内部包含三个virtual function,为create_object,create_component

                          get_type_name,留下接口;

      不包含任何成员变量;也不从其他class继承而来;

      

 

uvm_component_registry:包含两个参数,type和string,在宏调用的时候,一般是相同的;

内部两个static的成员变量:type_name = Tname;

             this_type = me; this_type是针对某个参数registry的具体的typedef;

      实现function,get_type_name;

        static function, get;同时registry到factory中,所以factory中注册的其实都是class对应的static类型的registry class

      

      

 

实现create的两个function:

1)create_component,factory最终调用的create函数,被调用;

      

2)create函数,得到factory的唯一实例,调用create_component_by_type,contxt可以是parent的path,

      static的function

      

两个override的static的function:

      由于registry中,有component的type,所以都是type类型的override;

      

      

 

uvm_object_registry类似;

      两个static类型的变量,两个create的function,两个overide的function。

 

除了调用uvm提供的宏,也可以自定义type_id的typedef,来完成factory的注册等操作。

      class mycomp extends uvm_component;

        typedef uvm_omponent_registry #(mycomp, "mycomp") type_id;

      endclass

这样的操作,缺少get_type,get_object_type的function。

以上是关于factory源码分析——component_registry和object_registry的主要内容,如果未能解决你的问题,请参考以下文章

自定义spring boot starter三部曲之三:源码分析spring.factories加载过程

factory源码分析——component_registry和object_registry

#yyds干货盘点#自定义spring boot starter三部曲之三:源码分析spring.factories加载过程

jquery源码部分分析

JQuery源码分析

Swoole 源码分析——Server模块之TaskWorker事件循环