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加载过程