NS2 分裂机制及代码分析<一>---解释类成员变量与编译类成员变量互操作
2014-02-21 15:52
253 查看
原文分析见博客地址:http://blog.sina.com.cn/s/blog_8eba0c2a0101blip.html
本文从中摘取几个需要注意到的地方
1.编译类变量与解释类变量的绑定
通常,无论是解释对象还是影子对象都有它们自己的类变量,不允许互相直接访问自己的变量。因此,NS2提供了一项机制来绑定两个体系的变量。在绑定之后,任何一方已绑定对象的改变都会自动的改变另一个体系的绑定对象。
NS2在影子对象函数的构造函数中将解释类变量绑定于编译对象。TclObject类在构造函数中调用以下特定函数来绑定变量。
其中,iname和cname分别代表解释体系和编译体系的变量。本质上来说,第一个参数和第二参数分别为解释器的变量句柄和编译变量的地址。
2.设置默认值
NS2在~ns/tcl/lib/ns-default.tcl中设定绑定变量的初始值。语法如下:<className> set <instvar> <def_value>.意为将<className>类的instvar变量<instvar>的值设为<def_value>。
为了设定变量的默认值,NS2调用了SplitObject的实例程序init-instvar{…}。该函数从~ns/tcl/lib/ns-default.tcl中读取变量的默认值并赋值给绑定变量。如果我们绑定了某个变量却没有设置默认值,实例函数SplitObject::warn-instvar{…}将会在屏幕上产生一个警告信息,但如果默认值设置的是一个无效值(例如,没有绑定或不存在),NS2不会打印警告信息。
3.命令调用
cmd 实例程序将整个语句(i,e.,”cmd <cmd_args>”)做为输入参数矢量(argv)给影子对象(此为TcpAgent)的“command(argc,argv)”函数。如程序3.9所示,该函数总是携带两个参数。第二个输入参数argv为字符数组,包含着由cmd传送过来的输入参数。第一个参数argc,是所有输入参数的个数(例如,argv中的非空元素的个数)。argv的第一个和第二个输入参数分别为cmd和命令名。剩余的元素包含着原始调用的输入参数。见表3.3
本文从中摘取几个需要注意到的地方
1.编译类变量与解释类变量的绑定
通常,无论是解释对象还是影子对象都有它们自己的类变量,不允许互相直接访问自己的变量。因此,NS2提供了一项机制来绑定两个体系的变量。在绑定之后,任何一方已绑定对象的改变都会自动的改变另一个体系的绑定对象。
NS2在影子对象函数的构造函数中将解释类变量绑定于编译对象。TclObject类在构造函数中调用以下特定函数来绑定变量。
其中,iname和cname分别代表解释体系和编译体系的变量。本质上来说,第一个参数和第二参数分别为解释器的变量句柄和编译变量的地址。
2.设置默认值
NS2在~ns/tcl/lib/ns-default.tcl中设定绑定变量的初始值。语法如下:<className> set <instvar> <def_value>.意为将<className>类的instvar变量<instvar>的值设为<def_value>。
为了设定变量的默认值,NS2调用了SplitObject的实例程序init-instvar{…}。该函数从~ns/tcl/lib/ns-default.tcl中读取变量的默认值并赋值给绑定变量。如果我们绑定了某个变量却没有设置默认值,实例函数SplitObject::warn-instvar{…}将会在屏幕上产生一个警告信息,但如果默认值设置的是一个无效值(例如,没有绑定或不存在),NS2不会打印警告信息。
3.命令调用
cmd 实例程序将整个语句(i,e.,”cmd <cmd_args>”)做为输入参数矢量(argv)给影子对象(此为TcpAgent)的“command(argc,argv)”函数。如程序3.9所示,该函数总是携带两个参数。第二个输入参数argv为字符数组,包含着由cmd传送过来的输入参数。第一个参数argc,是所有输入参数的个数(例如,argv中的非空元素的个数)。argv的第一个和第二个输入参数分别为cmd和命令名。剩余的元素包含着原始调用的输入参数。见表3.3
相关文章推荐
- NS2 分裂机制及代码分析<一>
- [学习]分布式缓存系统TAIR代码分析<一>
- QT核心机制分析1——信号与槽<一>
- <一>--RIL层代码分析-RIL_RadioFunctions *RIL_Init(funcs =rilInit()->mainloop()
- java反射机制初步认识<一>获取成员变量
- Nand ECC校验和纠错原理及2.6.27内核ECC代码分析<转帖>
- JAVA IO流 <一>文件基本操作
- 【Dialer】android6.0拨号界面分析<一>
- 为代码减负之<一>触发器(SQL)
- 让代码写得更好看---变量<1>
- 收集未经测试的Epoll模型代码<一>
- 3D打印机切片引擎Cura分析<一>
- 信息管理代码分析<一>登录密码
- quick-cocos2d-x的热更新机制实现<一>前言
- 使用git上传代码到github<一>
- Nosql :MongoDB一些基本操作<一>
- Git基础操作<一>
- <java.util>PriorityQueue代码分析
- <机器学习系统设计>第十章(上)----代码与错误分析
- C#中Stack<T>类的使用及部分成员函数的源码分析