A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
rng-seed-manager.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2012 Mathieu Lacage
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 *
17 */
18
19#include "rng-seed-manager.h"
20
21#include "attribute-helper.h"
22#include "config.h"
23#include "global-value.h"
24#include "log.h"
25#include "uinteger.h"
26
27/**
28 * \file
29 * \ingroup randomvariable
30 * ns3::RngSeedManager implementation.
31 */
32
33namespace ns3
34{
35
36NS_LOG_COMPONENT_DEFINE("RngSeedManager");
37
38/**
39 * \relates RngSeedManager
40 * The next random number generator stream number to use
41 * for automatic assignment.
42 */
43static uint64_t g_nextStreamIndex = 0;
44/**
45 * \relates RngSeedManager
46 * \anchor GlobalValueRngSeed
47 * The random number generator seed number global value. This is used to
48 * generate an new master PRNG sequence. It is typically not modified
49 * by user programs; the variable RngRun is preferred for independent
50 * replications.
51 *
52 * This is accessible as "--RngSeed" from CommandLine.
53 */
54static ns3::GlobalValue g_rngSeed("RngSeed",
55 "The global seed of all rng streams",
57 ns3::MakeUintegerChecker<uint32_t>());
58/**
59 * \relates RngSeedManager
60 * \anchor GlobalValueRngRun
61 * The random number generator substream index. This is used to generate
62 * new PRNG sequences for all streams (random variables) in such a manner
63 * that the streams remain uncorrelated. Incrementing this variable can
64 * be used for independent replications.
65 *
66 * This is accessible as "--RngRun" from CommandLine.
67 */
68static ns3::GlobalValue g_rngRun("RngRun",
69 "The substream index used for all streams",
71 ns3::MakeUintegerChecker<uint64_t>());
72
75{
77 UintegerValue seedValue;
78 g_rngSeed.GetValue(seedValue);
79 return static_cast<uint32_t>(seedValue.Get());
80}
81
82void
84{
85 NS_LOG_FUNCTION(seed);
86 Config::SetGlobal("RngSeed", UintegerValue(seed));
87}
88
89void
91{
92 NS_LOG_FUNCTION(run);
93 Config::SetGlobal("RngRun", UintegerValue(run));
94}
95
96uint64_t
98{
100 UintegerValue value;
101 g_rngRun.GetValue(value);
102 uint64_t run = value.Get();
103 return run;
104}
105
106uint64_t
108{
110 uint64_t next = g_nextStreamIndex;
112 return next;
113}
114
115} // namespace ns3
Attribute helper (ATTRIBUTE_ )macros definition.
Hold a so-called 'global value'.
Definition: global-value.h:76
void GetValue(AttributeValue &value) const
Get the value.
Definition: global-value.cc:98
static void SetRun(uint64_t run)
Set the run number of simulation.
static ns3::GlobalValue g_rngRun("RngRun", "The substream index used for all streams", ns3::UintegerValue(1), ns3::MakeUintegerChecker< uint64_t >())
The random number generator substream index.
static ns3::GlobalValue g_rngSeed("RngSeed", "The global seed of all rng streams", ns3::UintegerValue(1), ns3::MakeUintegerChecker< uint32_t >())
The random number generator seed number global value.
static void SetSeed(uint32_t seed)
Set the seed.
static uint64_t GetNextStreamIndex()
Get the next automatically assigned stream index.
static uint64_t GetRun()
Get the current run number.
static uint64_t g_nextStreamIndex
The next random number generator stream number to use for automatic assignment.
static uint32_t GetSeed()
Get the current seed value which will be used by all subsequently instantiated RandomVariableStream o...
Hold an unsigned integer type.
Definition: uinteger.h:45
uint64_t Get() const
Definition: uinteger.cc:37
Declaration of the various ns3::Config functions and classes.
ns3::GlobalValue declaration.
void SetGlobal(std::string name, const AttributeValue &value)
Definition: config.cc:940
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:202
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
Debug message logging.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ns3::RngSeedManager declaration.
ns3::UintegerValue attribute value declarations and template implementations.