factory源码分析——uvm_default_factory

Posted

tags:

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

uvm_factory本身是一个virtual class,不实现function,只定义模型,除了static的get函数:

      函数返回的是一个default_factory,已经实现过各个function。

      技术分享

      技术分享

 

uvm_default_factory,主要的三部分功能:register,create,override。

内部成员变量:  

register方面的变量:

        bit                     m_types[uvm_object_wrapper]   ——注册type

        uvm_object_wrapper  m_type_names[string] ——注册name

override方面的变量:

        uvm_factory_override       m_type_overrides[$] ——type_overide_by_type    

        uvm_factory_override       m_wild_inst_overrides[$] ——type_overide_by_name(name不含*等匹配符)

        uvm_factory_override  m_override_info[$]

        uvm_factory_queue_class  m_inst_override_queues[uvm_object_wrapper]  ——type_overide inst相关

        uvm_factory_queue_class  m_inst_override_name_queues[string]  ——type_override_by_name(name包含*匹配符)

 

register:在m_type_names中找不到该obj时,注册更新m_type_names;m_types; 

      如果m_inst_override_name_queues中,存在该name,更新m_inst_override_queues

      技术分享

 

create_object_by_name:首先检查是否有override类型的name,之后调用registry的create_object函数;

             registry的static对象从m_type_names中拿到;(create_component_by_name类似)

      技术分享

create_object_by_type:首先检查是否有override类型的type,之后调用registry的create_object函数;

              (create_component_by_type类似)

      技术分享

find_override_by_name:根据inst_path,查找m_inst_override_name_queues,或m_type_override,间接调用find_override_by_type;

find_override_by_type:迭代查找,直到查到的override type为本身;

      技术分享

set_type_override_by_type,没有注册,先注册,有override的记录,由replace来控制要不要替换,

                没有记录,直接push_back

      技术分享

set_type_override_by_name,与set_type_override_by_type类似。

set_inst_override_by_type,没有注册先注册,之后push_back到inst的queue中。

      技术分享

      技术分享

set_inst_override_by_name,根据是否有wildcard,push_back到不同的queue中。

      技术分享

 

m_has_widlcard,判断是否有*和?

      技术分享

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

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

factory源码分析——component_registry和object_registry

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

jquery源码部分分析

Twisted源码分析2

Twisted源码分析2