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

 
先介绍如何使用AddressAdjuster,然后分析UI参数的生成及使用。
 
 
1. AddressAdjuster的使用
 
a. 创建AddressAdjuster实例
 
注意usage()方法有一个implicit Parameters参数,在方法范围内引入了一个隐式参数对象,在new AddressAdjuster的时候会使用。
 
b. 关联node的上下游节点
 
 
c. 关联chip_id的上游节点
 
 
d. 引用module构建硬件模块
 
 
2. UI生成
 
UI是指Node的DUEB参数中的UI。
 
引用adjuster.module后会执行module定义的代码,其中:
 
会调用node.in方法:
 
bundulesIn和edgesIn都是lazy变量:
 
并且bundlesIn依赖于edgesIn,这里主要关注edgesIn:
 
edgesIn依赖于iPorts和uiParams:
 
这里的iPorts为输入口,即与parent的连接口,iPorts.size = 1。
 
uiParams用到了uoParams:
 
这里oPorts为输出口,即与local和remote相连的连接口。n分别为local和remote节点。
 
所以uiParams中的:
a. iPorts.size = 1;
b. uoParams为local和remote节点向上传播的TLManagerPortParameters参数,uoParams.size = 2;
 
mapParamsU的实现为:
把uoParams传递给uFn()方法,返回一个UI;然后把这个UI复制成n(=1)份。
 
uFn()的实现为:
 
返回的一个UI为:
 
3. UI使用
 
a. edgesIn
 
edgesIn通过调用edgeI方法生成:
其中i为生成的UI。
 
edgeI方法的实现为:
 
其中,pu为UI,即TLManagerPortParameters:
 
b. bundlesIn
 
bundlesIn通过edgesIn和bundleI方法生成:
 
bundleI方法的实现如下:
 
ei.bundle的实现如下:
 
TLEdgeParameters是TLEdgeIn的父类:
所以TLEdgeParameters中的manager参数,即是传入的UI参数。
 
TLBundleParameters()伴生方法的实现如下:
 
可以看到其中并没有使用UI,亦即manager参数中的实际地址集合。
 
c. parentEdge的使用
 
所以不需要关注parent,只需要关注parentEdge的使用,以坚持是否用到其中的地址集合即可:
 
parentEdge的使用如下:
TLArbiter.robin中也没有实际使用到manager的地址集合。
 
所以managerFn的实现中,废了大力气生成的地址集合,目前来看并没有实际用处。
 

Rocket - diplomacy - AddressAdjuster分析的更多相关文章

  1. Rocket - diplomacy - AddressAdjuster

    https://mp.weixin.qq.com/s/X0s5CWN84GEiwpNR7tiRgA 基于AddressAdjuster介绍LazyModule的实现.   参考链接:https://g ...

  2. Rocket - diplomacy - DUEB参数模型分析

    https://mp.weixin.qq.com/s/533bJxcPRgO4W2gf_OEhEw   分析DUEB参数模型中各种参数类型的可能性.     1. 节点类型   根据参数的传播方向,可 ...

  3. Rocket - diplomacy - LazyModule的组织方式

    https://mp.weixin.qq.com/s/vaDUekxkFkOJLmzg5jCngw 简单介绍LazyModule/LazyModuleImp的组织方式. 1. LazyModule L ...

  4. Rocket - diplomacy - misaligned

    https://mp.weixin.qq.com/s/poCJBcx45clXHm6Uuv8M6w 介绍AddressSet.misaligned的实现.之前介绍的比较概括,也有偏差.这里根据实际执行 ...

  5. Rocket - diplomacy - LazyModule的实例化(补)

    https://mp.weixin.qq.com/s/rgCRorjPYyyD6i7moIzbZg   介绍LazyModule和Node构造方法的执行过程,即实例化过程.     1. NullIn ...

  6. Rocket - diplomacy - LazyModule的实例化

    https://mp.weixin.qq.com/s/9PsBt4_4qHx4i6C5XtuiUw   介绍LazyModule和Node构造方法的执行过程,即实例化过程.     1. NullIn ...

  7. Rocket - diplomacy - LazyModule

    https://mp.weixin.qq.com/s/FBU8fE4u9-UK6mRGQOlvbQ   介绍LazyModule的实现.     ​​   1. children   LazyModu ...

  8. Rocket - diplomacy - ValName

    https://mp.weixin.qq.com/s/so-2x5KLfYF0IMCCqNThwQ   简单调试ValName实现:   1. 使用     ​​   Desugar之后如下: ​​ ...

  9. Rocket - diplomacy - NodeHandle相关类

    https://mp.weixin.qq.com/s/GWL41P1G1BXm2sTeLmckdA   介绍NodeHandle相关的类.     ​​   1. NoHandle   顶层类(tra ...

随机推荐

  1. C - 小明系列故事――捉迷藏 HDU - 4528 bfs +状压 旅游-- 最短路+状压

    C - 小明系列故事――捉迷藏 HDU - 4528 这个题目看了一下题解,感觉没有很难,应该是可以自己敲出来的,感觉自己好蠢... 这个是一个bfs 用bfs就很好写了,首先可以预处理出大明和二明能 ...

  2. D - Pearls HDU - 1300 斜率dp+二分

    D - Pearls HDU - 1300 这个题目也是一个比较裸的斜率dp,依照之前可以推一下这个公式,这个很好推 这个注意题目已经按照价格升序排列序,所以还是前缀和还是单调的. sum[i] 表示 ...

  3. Q - Play With Sequence HDU - 3971 线段树 重新排序建树

    Q - Play With Sequence HDU - 3971 这个题目是一个线段树,比较特别的线段树,就是c询问一定次数之后重新排序建树来优化减低复杂度. 第一次碰到这种题目有点迷. 这个题目写 ...

  4. dumpsys-package

    dumpsys-package ams和pms是android系统最重要的系统服务,本文解析dumpsys package命令,看哪些PMS相关的系统信息,数据结构是运行时可以查看的. 命令提示 co ...

  5. 装完B就跑,这几个Linux指令真的Diǎo

    本文介绍一些有趣的指令,实用或者可以装逼,不妨自己也来试试看: 文章目录 1 故事的开局 2 杰哥的表演 2.1 sl 2.2 htop 2.3 gcp 2.4 hollywood 2.5 cmatr ...

  6. Gulp的代理转发插件

    需求背景 前后端分开部署时,需要单独为前端启动一个服务,如果使用gulp-connect的话,那么代理需要额外的插件来配置.首先说下为什么需要代理,gulp-connect是静态web的server( ...

  7. Redis学习笔记(七) 数据库

    Redis 服务器将所有的数据库都保存在服务器状态redisServer结构的db数组中,db数组的每个项都是一个redisDB: struct redisServer{ //一个数组保存着服务器中的 ...

  8. Windows基础学习

    0x01 常用的端口 HTTP协议代理服务器常用端口号:80/8080/3128/8081/9098SOCKS代理协议服务器常用端口号:1080FTP(文件传输)协议代理服务器常用端口号:21Teln ...

  9. springMVC 重定向带参数

    重定向时经常需要带上一定的标志位参数,当然,强大的springmvc提供了便利的操作. 只需要在方法参数中添加RedirectAttributes 或其子类即可! @RequestMapping(&q ...

  10. 从`ArrayList`中了解Java的迭代器

    目录 什么是迭代器 迭代器的设计意义 ArrayList对迭代器的实现 增强for循环和迭代器 参考链接 什么是迭代器 Java中的迭代器--Iterator是一个位于java.util包下的接口,这 ...