A Discrete-Event Network Simulator
API
file-helper-example.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2013 University of Washington
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * This is based on double-probe-example.cc.
19  *
20  * Author: Mitch Watrous (watrous@u.washington.edu)
21  */
22 
23 /*
24  * This example is designed to show the main features of an
25  * ns3::FileHelper.
26  */
27 
28 #include <string>
29 
30 #include "ns3/core-module.h"
31 #include "ns3/stats-module.h"
32 
33 using namespace ns3;
34 
35 NS_LOG_COMPONENT_DEFINE ("FileHelperExample");
36 
37 //
38 // This is our test object, an object that increments a counter according
39 // to a Poisson process, and exports the (integer-valued) count as a
40 // trace source.
41 //
42 class Emitter : public Object
43 {
44 public:
49  static TypeId GetTypeId (void);
50  Emitter ();
51 private:
52  void DoInitialize (void);
53  void Count (void);
54 
57 
58 };
59 
61 
62 TypeId
63 Emitter::GetTypeId (void)
64 {
65  static TypeId tid = TypeId ("ns3::Emitter")
66  .SetParent<Object> ()
67  .SetGroupName ("Stats")
68  .AddConstructor<Emitter> ()
69  .AddTraceSource ("Counter",
70  "sample counter",
72  "ns3::TracedValueCallback::Double")
73  ;
74  return tid;
75 }
76 
77 Emitter::Emitter (void)
78 {
79  NS_LOG_FUNCTION (this);
80  m_counter = 0;
81  m_var = CreateObject<ExponentialRandomVariable> ();
82 }
83 
84 void
86 {
87  NS_LOG_FUNCTION (this);
88  Simulator::Schedule (Seconds (m_var->GetValue ()), &Emitter::Count, this);
89 }
90 
91 void
92 Emitter::Count (void)
93 {
94  NS_LOG_FUNCTION (this);
95  NS_LOG_DEBUG ("Counting at " << Simulator::Now ().GetSeconds ());
96  m_counter += 1.0;
97  Simulator::Schedule (Seconds (m_var->GetValue ()), &Emitter::Count, this);
98 }
99 
100 int main (int argc, char *argv[])
101 {
103  cmd.Parse (argc, argv);
104 
105  //
106  // This Emitter has a trace source object that will emit values at
107  // random times.
108  //
109 
110  Ptr<Emitter> emitter = CreateObject<Emitter> ();
111  Names::Add ("/Names/Emitter", emitter);
112 
113  //
114  // This file helper will be used to put data values into a file.
115  //
116 
117  // Create the file helper.
118  FileHelper fileHelper;
119 
120  // Configure the file to be written.
121  fileHelper.ConfigureFile ("file-helper-example",
123 
124  // Set the labels for this formatted output file.
125  fileHelper.Set2dFormat ("Time (Seconds) = %.3f\tCount = %.0f");
126 
127  // Write the values generated by the probe. The path that we
128  // provide helps to disambiguate the source of the trace.
129  fileHelper.WriteProbe ("ns3::Uinteger32Probe",
130  "/Names/Emitter/Counter",
131  "Output");
132 
133  // The Emitter object is not associated with an ns-3 node, so
134  // it won't get started automatically, so we need to do this ourselves
136 
137  Simulator::Stop (Seconds (100.0));
138  Simulator::Run ();
140 
141  return 0;
142 }
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:45
static void Run(void)
Run the simulation.
Definition: simulator.cc:226
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:202
TracedValue< double > m_counter
cmd
Definition: second.py:35
static TypeId GetTypeId(void)
Register this type.
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source.
static void Add(std::string name, Ptr< Object > object)
Add the association between the string "name" and the Ptr<Object> obj.
Definition: names.cc:770
static EventId Schedule(Time const &delay, MEM mem_ptr, OBJ obj)
Schedule an event to expire after delay.
Definition: simulator.h:1381
Helper class used to put data values into a file.
Definition: file-helper.h:38
Parse command-line arguments.
Definition: command-line.h:213
static void Destroy(void)
Execute the events scheduled with ScheduleDestroy().
Definition: simulator.cc:190
void Count(void)
void DoInitialize(void)
Initialize() implementation.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void ConfigureFile(const std::string &outputFileNameWithoutExtension, enum FileAggregator::FileType fileType=FileAggregator::SPACE_SEPARATED)
Definition: file-helper.cc:68
static Time Now(void)
Return the current simulation virtual time.
Definition: simulator.cc:249
static void Stop(void)
Tell the Simulator the calling event should be the last one executed.
Definition: simulator.cc:234
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:270
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1014
void WriteProbe(const std::string &typeId, const std::string &path, const std::string &probeTraceSource)
Definition: file-helper.cc:90
TracedValue< uint32_t > m_counter
A base class which provides memory management and object aggregation.
Definition: object.h:87
a unique identifier for an interface.
Definition: type-id.h:58
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:915
void Initialize(void)
Invoke DoInitialize on all Objects aggregated to this one.
Definition: object.cc:183
void Set2dFormat(const std::string &format)
Sets the 2D format string for the C-style sprintf() function.
Definition: file-helper.cc:379