NS2中OTcl类和C++类的连接(二)

3.3 InstVar类

Instvar类的作用类似于胶水,它负责将C++类的成员变量和OTcl类的实例程序绑定在一起。当一个C++变量和OTcl实例程序绑定在一起时,任何一方的改变都会引起对方的改变(更新)。NS2支持5种数据类型的绑定:实数,整数,带宽,时间,布尔。这5中类型既不是C++数据类型,也不是OTcl数据类型(Tcl以字符的形式存储一切,因此OTcl变量没有数据类型)。定义类型这些主要是因为它们有利于NS2赋值。

image

如表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 表示  ‘纳’ ×10的-6次方

p 表示  ‘微’ ×10的-8次方

例如:

$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会把整数转化成布尔型,并更型所绑定的编译体系的变量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值