5426
|
1 |
@node Helpers
|
|
2 |
@chapter Helpers
|
|
3 |
|
|
4 |
The above chapters introduced you to various ns-3 programming concepts
|
|
5 |
such as smart pointers for reference-counted memory management, attributes,
|
|
6 |
namespaces, callbacks, etc. Users who work at this low-level API
|
|
7 |
can interconnect ns-3 objects with fine granulariy. However, a
|
|
8 |
simulation program written entirely using the low-level API would
|
|
9 |
be quite long and tedious to code. For this reason, a separate so-called
|
|
10 |
``helper API'' has been overlaid on the core ns-3 API. If you have read
|
|
11 |
the ns-3 tutorial, you will already be familiar with the helper API,
|
|
12 |
since it is the API that new users are typically introduced to first.
|
|
13 |
In this chapter, we introduce the design philosophy of the helper
|
|
14 |
API and contrast it to the low-level API. If you become a heavy
|
|
15 |
user of ns-3, you will likely move back and forth between these
|
|
16 |
APIs even in the same program.
|
|
17 |
|
|
18 |
The helper API has a few goals:
|
|
19 |
@enumerate
|
|
20 |
@item the rest of @code{src/} has no dependencies on the helper API;
|
|
21 |
anything that can be done with the helper API can be coded also at
|
|
22 |
the low-level API
|
|
23 |
@item @strong{Containers:} Often simulations will need to do
|
|
24 |
a number of identical actions to groups of objects. The helper
|
|
25 |
API makes heavy use of containers of similar objects to which similar
|
|
26 |
or identical operations can be performed.
|
|
27 |
@item The helper API is not generic; it does not strive to maximize
|
|
28 |
code reuse. So, programming constructs such as polymorphism and
|
|
29 |
templates that achieve code reuse are not as prevalent. For instance,
|
|
30 |
there are separate CsmaNetDevice helpers and PointToPointNetDevice
|
|
31 |
helpers but they do not derive from a common NetDevice base class.
|
|
32 |
@item The helper API typically works with stack-allocated (vs.
|
|
33 |
heap-allocated) objects. For some programs, ns-3 users may not
|
|
34 |
need to worry about any low level Object Create or Ptr handling;
|
|
35 |
they can make do with containers of objects and stack-allocated helpers
|
|
36 |
that operate on them.
|
|
37 |
@end enumerate
|
|
38 |
|
|
39 |
The helper API is really all about making ns-3 programs easier to
|
|
40 |
write and read, without taking away the power of the low-level
|
|
41 |
interface. The rest of this chapter provides some examples of
|
|
42 |
the programming conventions of the helper API.
|