天天看點

大話ns2網絡仿真3

3.3 InstVar類

Instvar 類的作用類似于膠水,它負責将C++類的成員變量和OTcl類的執行個體程式綁定在一起。當一個C++變量和OTcl執行個體程式綁定在一起時,任何一方的改變都會引起對方的改變(更新)。NS2支援5種資料類型的綁定:實數,整數,帶寬,時間,布爾。這5中類型既不是C++資料類型,也不是OTcl資料類型(Tcl以字元的形式存儲一切,是以OTcl變量沒有資料類型)。 定義類型這些主要是因為它們有利于NS2指派。

大話ns2網絡仿真3

如表3.1,這5種資料類型被定義為5個C++類,都繼承于InstVar類。其中實數,帶寬,時間三個資料類型都使用double型,而整數和布爾分别使用int和bool C++型。

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會把整數轉化成布爾型,并更型所綁定的編譯體系的變量。

繼續閱讀