NS3 GlobalValue类API以及使用说明

GlobalValue类

位置:

core/model/global-value.cc

功能:

可从四个地方获取值:

    1  定义时设定的初始值
    2  从NS_GLOBAL_VALUE环境变量
    3 从命令行
    4 可明确调用SetValue()或者 Bind()函数

Instances of this class are expected to be allocated as static global variables and should be used to store configurable global state.

该类的实例应该被分配为一个静态的全局变量,并且应该被用于存储配置的全局状态。

// source.cc:
static GlobalValue g_myGlobal =
  GlobalValue ("myGlobal", "My global value for ...",
               IntegerValue (12),
               MakeIntegerChecker ());

GlobalValue::GlobalValue (std::string name, std::string help,
                          const AttributeValue &initialValue,
                          Ptr<const AttributeChecker> checker)

GlobalValue 定义包含四个参数:

第一个参数:变量名

第二个参数:该变量的帮助信息,一般说明定义该变量的意义

第三个参数:该变量的初始值,初始值不能为空,否则出错。

第四个参数:该变量的值的校验。该值不能为空,否则出错。这个参数是为了确保设置的值是合法的。AttributeChecker有许多子类。

函数:

void ns3::GlobalValue::Bind     (   std::string     name,
        const AttributeValue &      value 
    )   

bool ns3::GlobalValue::BindFailSafe     (   std::string     name,
        const AttributeValue &      value 
    )   

这两个函数都是设定对应的name的value值。
区别在于第二个函数返回bool值指示是否设定成功。第一个函数如果设定失败,直接崩溃。

void ns3::GlobalValue::GetValueByName   (   std::string     name,
        AttributeValue &    value 
    )   

bool ns3::GlobalValue::GetValueByNameFailSafe   (   std::string     name,
        AttributeValue &    value 
    )   

两个函数都是根据name获取对应的value值。
区别在于,第一个函数失败情况下,会触发NS_FATAL_ERROR
第二个函数返回一个bool值。指示成功与否。

使用

第一步:定义

使用全局变量,首先定义全局变量:

static ns3::GlobalValue g_rngSeed ("RngSeed", 
                                   "The global seed of all rng streams",
                                   ns3::IntegerValue(1),
                                   ns3::MakeIntegerChecker<uint32_t> ());

static ns3::GlobalValue g_rngRun ("RngRun", 
                                  "The substream index used for all streams",
                                  ns3::IntegerValue (1),
                                  ns3::MakeIntegerChecker<int64_t> ());

定义了两个全局变量:RngSeed和RngRun。

上面的代码位置/core/model/rng-seed-manager.cc

第二步设置变量值:

第一种方法:

Config::SetGlobal ("RngSeed", IntegerValue(seed));
}
Config::SetGlobal ("RngRun", IntegerValue (run));

第二种方法:
GlobalValue::Bind ("RngSeed", value);
GlobalValue::BindFailSafe ("RngRun", value);

第三种方法:
设置环境变量:
NS_GLOBAL_VALUE='RngSeed=Value;RngRun=OtherValue;'

第四种方法:
命令行方式
./waf --run="source file name --RngSeed=value --RngRun=OtherValue"

第三步:获取变量值

IntegerValue value
bool GlobalValue::GetValueByNameFailSafe ("RngSeed", value);
void GlobalValue::GetValueByName ("RngRun", value);

获取全部全局变量:

for (GlobalValue::Iterator i = GlobalValue::Begin (); i != GlobalValue::End (); ++i)
{
      //获取变量名
      std::stringstream ss;
      ss << "    --" << (*i)->GetName () << "=[";
      
      Ptr<const AttributeChecker> checker = (*i)->GetChecker ();
      
      //获取变量值
      StringValue v;
      (*i)->GetValue (v);
      ss << v.Get () << "]" << std::endl;

      //获取变量帮助信息
      ss << "        " << (*i)->GetHelp () << std::endl;
      globals.push_back (ss.str ());
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容