您的位置:首页 > 编程语言

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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: