码迷,mamicode.com
首页 > 其他好文 > 详细

Rocket - config - Configs

时间:2019-02-07 16:21:24      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:app   init   生成   dom   对象   nbsp   组织   而不是   实例   

https://mp.weixin.qq.com/s/z2gUYuYQAHQCa_5HZcBszw

 
介绍各个配置项的组织方式。
 
参考链接:
 
 
1. Parameters的chain方法
 
chain方法用于实现find方法,即查找逻辑:
?技术图片?
其使用链式查找的方法,逐个查找各个配置,直到查到所查的key。
 
chain方法所属对象(this)、三个参数,标识着配置链表的不同位置、要查找的key:
a. pname:要查找的Key;
b. site: 整个配置链表;
c. this:当前正在查找的配置项;
d. tail: 配置链表中this配置项之后的配置项;
 
 
2. PartialParameters的chain方法
 
PartialParameters中chain方法的实现如下:
?技术图片?
 
其函数成员f使用的参数,就是当前的查找上下文。如下:
a. site: 整个配置链表;
b. this:当前正在查找的配置项;
c. tail: 配置链表中this配置项之后的配置项;
 
 
3. Config的第二个构造方法
 
?技术图片?
 
第二个构造方法(secondary constructor),根据传入的参数f,生成一个PartialParameters,然后作为参数调用第一个构造方法(primary constructor)。
 
 
4. 实例
 
?技术图片?
 
BaseSubsystemConfig继承自Config类,实例化时调用Config的第二个构造方法。
 
这里的(site, here, up)是形式参数,实际调用时的参数在PartialParameters类中传入,为(site, this, tail)。意义如下:
a. site/site: 整个配置链表;
b. this/here:当前正在查找的配置项;
c. tail/up: 配置链表中this配置项之后的配置项;
 
 
5. 配置项之间的依赖关系
 
某一个配置项可能依赖于其他配置项的值,如BaseSubsystemConfig中的PgLevels依赖于XLen:
?技术图片?
 
获取所依赖配置值的方式就是通过site进行查找,也就是在整个配置链表中进行查找。
 
 
6. 配置项之间的覆盖关系
 
1) 因为查找是链式的,所以如果两个配置项含有同一个key,那么排在前面的key的值就会被使用。
 
如DefaultRV32Config:
?技术图片?
 
WithRV32中也定义了XLen这个配置项,他排在BaseSubsystemConfig中的XLen之前。所以针对DefaultRV32Config的实例使用site(XLen)时,获取到的是32,而不是64。
?技术图片?
 
2) 排在前面的配置项也可以使用排在后面的配置项的值,并对其进行更改。
 
同样如DefaultRV32Config。
?技术图片?
 
WithRV32中的配置项RocketTilesKey,使用up(RocketTilesKey, site)查找配置链表中后续配置项中的RocketTilesKey,并对其进行修改。
 
这里是可以查找到的,因为DefaultConfig中也定义了RocketTilesKey这个配置项。
 
 
7. Config的子类们
 
如下链接整理并列出了所有Config的子类:
 
?技术图片?

Rocket - config - Configs

标签:app   init   生成   dom   对象   nbsp   组织   而不是   实例   

原文地址:https://www.cnblogs.com/wjcdx/p/10354813.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!