3.3 InstVar类
Instvar类的作用类似于胶水,它负责将C++类的成员变量和OTcl类的实例程序绑定在一起。当一个C++变量和OTcl实例程序绑定在一起时,任何一方的改变都会引起对方的改变(更新)。NS2支持5种数据类型的绑定:实数,整数,带宽,时间,布尔。这5中类型既不是C++数据类型,也不是OTcl数据类型(Tcl以字符的形式存储一切,因此OTcl变量没有数据类型)。定义类型这些主要是因为它们有利于NS2赋值。
如表3.1,这5种数据类型被定义为5个C++类,都继承于InstVar类。其中实数,带宽,时间三个数据类型都使用double型,而整数和布尔分别使用int和boolC++型。
3.3.1 实数和整数变量
这两种NS2数据类型分别被指定为实数型和整型。另外,我们可以使用e<x>表示×10<x>(表示10的x次方).
例子 3.4 realvar 和intvar是OTcl 对象obj的实数和整数数据类型 。它们可以以下面几种方式赋值
$obj set realvar 1.2e3
$obj set realvar 1200
$obj set intvar 1200
3.3.2 带宽
带宽被指定为实数型数据。带宽的默认单位是比特每秒(bps)。另外,我们可以在带宽设定时加上以下后缀。
k或K表示‘千’ ×10的3次方
m或M表示‘兆’ ×10的6次方
B表示带宽的单位从比特每秒(bps)改变为字节每秒(Bps)
NS2只考虑有效后缀的第一个字母。因此,对NS2来说‘M’和‘Mps’意义相同。
例如 :
$obj set bwvar 8000000
$obj set bwvar 8m
$obj set bwvar 8Mbps
$obj set bwvar 800K
$obj set bwvar 1MB
3.3.3 Time
时间也别指定为实数型。时间的默认单位是秒。另外,我们也可以增加后缀来改变时间单位。
m 表示 ‘毫’ ×10的-3次方
n 表示
p 表示
例如:
$obj set timevar 2m
$obj set timevar 2e-3
$obj set timevar 2e6n
$obj set timevar 2e9ps
3.3.4 布尔
布尔被指定为‘真’(正数)或‘假’(零)。如果一个布尔变量的第一个字母是‘t’或者‘T’,或数字比0大则布尔值为真,否则为假。
例子3.7;
#set boolvar to be TRUE
$obj set boolvar 1
$obj set boolvar T
$obj set boolvar true
$obj set boolvar true
$obj set boolvar tasty
$obj set boolvar 20
$obj set boolvar 3.37
#set boolvar to be FALSE
$obj set boolvar 0
$obj set boolvar f
$obj set boolvar false
$obj set boolvar something
$obj set boolvar –5.29
请谨记:NS2只对第一个布尔类型的第一个字母做辨别,因此true和tasty没有区别。
给OTcl变量赋值之后,NS2把字符型数值转换为相应的C++类型。除了布尔型,NS2把字符型数值转化为int型或者double型。在这一过程中,有效后缀也会进行相应的转化。对于布尔型,NS2只考虑第一个字母。若一个字符是整数,NS2不做任何处理,若第一个字母是T或者t,NS2会把这个字符转化成整数1,反之为0.转化完成后,NS2会把整数转化成布尔型,并更型所绑定的编译体系的变量。