A Discrete-Event Network Simulator
API
simulator.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2005 INRIA
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  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
19  */
20 
21 #ifndef SIMULATOR_H
22 #define SIMULATOR_H
23 
24 #include "event-id.h"
25 #include "event-impl.h"
26 #include "make-event.h"
27 #include "nstime.h"
28 
29 #include "object-factory.h"
30 
31 #include <stdint.h>
32 #include <string>
33 
40 namespace ns3 {
41 
42 class SimulatorImpl;
43 class Scheduler;
44 
68 class Simulator
69 {
70 public:
83  static void SetImplementation (Ptr<SimulatorImpl> impl);
84 
103 
112  static void SetScheduler (ObjectFactory schedulerFactory);
113 
123  static void Destroy (void);
124 
134  static bool IsFinished (void);
135 
146  static void Run (void);
147 
156  static void Stop (void);
157 
167  static void Stop (const Time &delay);
168 
185  static uint32_t GetContext (void);
186 
188  enum {
192  NO_CONTEXT = 0xffffffff
193  };
194 
215  template <typename MEM, typename OBJ>
216  static EventId Schedule (Time const &delay, MEM mem_ptr, OBJ obj);
217 
229  template <typename MEM, typename OBJ, typename T1>
230  static EventId Schedule (Time const &delay, MEM mem_ptr, OBJ obj, T1 a1);
231 
245  template <typename MEM, typename OBJ, typename T1, typename T2>
246  static EventId Schedule (Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
247 
263  template <typename MEM, typename OBJ,
264  typename T1, typename T2, typename T3>
265  static EventId Schedule (Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
266 
284  template <typename MEM, typename OBJ,
285  typename T1, typename T2, typename T3, typename T4>
286  static EventId Schedule (Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4);
287 
307  template <typename MEM, typename OBJ,
308  typename T1, typename T2, typename T3, typename T4, typename T5>
309  static EventId Schedule (Time const &delay, MEM mem_ptr, OBJ obj,
310  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
311 
324  template <typename MEM, typename OBJ,
325  typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
326  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj,
327  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6);
328 
341  static EventId Schedule (Time const &delay, void (*f)(void));
342 
352  template <typename U1, typename T1>
353  static EventId Schedule (Time const &delay, void (*f)(U1), T1 a1);
354 
367  template <typename U1, typename U2,
368  typename T1, typename T2>
369  static EventId Schedule (Time const &delay, void (*f)(U1,U2), T1 a1, T2 a2);
370 
386  template <typename U1, typename U2, typename U3,
387  typename T1, typename T2, typename T3>
388  static EventId Schedule (Time const &delay, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
389 
408  template <typename U1, typename U2, typename U3, typename U4,
409  typename T1, typename T2, typename T3, typename T4>
410  static EventId Schedule (Time const &delay, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
411 
433  template <typename U1, typename U2, typename U3, typename U4, typename U5,
434  typename T1, typename T2, typename T3, typename T4, typename T5>
435  static EventId Schedule (Time const &delay, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
436 
448  template <typename U1, typename U2, typename U3, typename U4, typename U5, typename U6,
449  typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
450  static EventId Schedule (Time const &time, void (*f)(U1,U2,U3,U4,U5,U6), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6);
451 
452  // Schedule events (in the same context) to run at a future time.
454 
474  template <typename MEM, typename OBJ>
475  static void ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj);
476 
488  template <typename MEM, typename OBJ, typename T1>
489  static void ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj, T1 a1);
490 
504  template <typename MEM, typename OBJ, typename T1, typename T2>
505  static void ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
506 
522  template <typename MEM, typename OBJ,
523  typename T1, typename T2, typename T3>
524  static void ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
525 
543  template <typename MEM, typename OBJ,
544  typename T1, typename T2, typename T3, typename T4>
545  static void ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4);
546 
566  template <typename MEM, typename OBJ,
567  typename T1, typename T2, typename T3, typename T4, typename T5>
568  static void ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj,
569  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
570 
585  template <typename MEM, typename OBJ,
586  typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
587  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj,
588  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6);
589 
603  static void ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(void));
604 
614  template <typename U1,
615  typename T1>
616  static void ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1), T1 a1);
617 
630  template <typename U1, typename U2,
631  typename T1, typename T2>
632  static void ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1,U2), T1 a1, T2 a2);
633 
649  template <typename U1, typename U2, typename U3,
650  typename T1, typename T2, typename T3>
651  static void ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
652 
671  template <typename U1, typename U2, typename U3, typename U4,
672  typename T1, typename T2, typename T3, typename T4>
673  static void ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
674 
696  template <typename U1, typename U2, typename U3, typename U4, typename U5,
697  typename T1, typename T2, typename T3, typename T4, typename T5>
698  static void ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
699 
713  template <typename U1, typename U2, typename U3, typename U4, typename U5, typename U6,
714  typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
715  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3,U4,U5,U6), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6);
716  // Schedule events (in a different context) to run now or at a future time.
718 
734  template <typename MEM, typename OBJ>
735  static EventId ScheduleNow (MEM mem_ptr, OBJ obj);
736 
747  template <typename MEM, typename OBJ,
748  typename T1>
749  static EventId ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1);
750 
763  template <typename MEM, typename OBJ,
764  typename T1, typename T2>
765  static EventId ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
766 
781  template <typename MEM, typename OBJ,
782  typename T1, typename T2, typename T3>
783  static EventId ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
784 
801  template <typename MEM, typename OBJ,
802  typename T1, typename T2, typename T3, typename T4>
803  static EventId ScheduleNow (MEM mem_ptr, OBJ obj,
804  T1 a1, T2 a2, T3 a3, T4 a4);
823  template <typename MEM, typename OBJ,
824  typename T1, typename T2, typename T3, typename T4, typename T5>
825  static EventId ScheduleNow (MEM mem_ptr, OBJ obj,
826  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
827 
839  template <typename MEM, typename OBJ,
840  typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
841  static EventId ScheduleNow (MEM mem_ptr, OBJ obj,
842  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6);
843 
852  static EventId ScheduleNow (void (*f)(void));
853 
862  template <typename U1,
863  typename T1>
864  static EventId ScheduleNow (void (*f)(U1), T1 a1);
865 
877  template <typename U1, typename U2,
878  typename T1, typename T2>
879  static EventId ScheduleNow (void (*f)(U1,U2), T1 a1, T2 a2);
880 
895  template <typename U1, typename U2, typename U3,
896  typename T1, typename T2, typename T3>
897  static EventId ScheduleNow (void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
898 
916  template <typename U1, typename U2, typename U3, typename U4,
917  typename T1, typename T2, typename T3, typename T4>
918  static EventId ScheduleNow (void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
919 
940  template <typename U1, typename U2, typename U3, typename U4, typename U5,
941  typename T1, typename T2, typename T3, typename T4, typename T5>
942  static EventId ScheduleNow (void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
943 
954  template <typename U1, typename U2, typename U3, typename U4, typename U5, typename U6,
955  typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
956  static EventId ScheduleNow (void (*f)(U1,U2,U3,U4,U5,U6), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6);
957  // Schedule events (in the same context) to run now.
959 
976  template <typename MEM, typename OBJ>
977  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj);
978 
989  template <typename MEM, typename OBJ,
990  typename T1>
991  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1);
992 
1005  template <typename MEM, typename OBJ,
1006  typename T1, typename T2>
1007  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
1008 
1023  template <typename MEM, typename OBJ,
1024  typename T1, typename T2, typename T3>
1025  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
1026 
1043  template <typename MEM, typename OBJ,
1044  typename T1, typename T2, typename T3, typename T4>
1045  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj,
1046  T1 a1, T2 a2, T3 a3, T4 a4);
1065  template <typename MEM, typename OBJ,
1066  typename T1, typename T2, typename T3, typename T4, typename T5>
1067  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj,
1068  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
1069 
1081  template <typename MEM, typename OBJ,
1082  typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
1083  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj,
1084  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6);
1085 
1093  static EventId ScheduleDestroy (void (*f)(void));
1094 
1103  template <typename U1,
1104  typename T1>
1105  static EventId ScheduleDestroy (void (*f)(U1), T1 a1);
1106 
1118  template <typename U1, typename U2,
1119  typename T1, typename T2>
1120  static EventId ScheduleDestroy (void (*f)(U1,U2), T1 a1, T2 a2);
1121 
1136  template <typename U1, typename U2, typename U3,
1137  typename T1, typename T2, typename T3>
1138  static EventId ScheduleDestroy (void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
1139 
1157  template <typename U1, typename U2, typename U3, typename U4,
1158  typename T1, typename T2, typename T3, typename T4>
1159  static EventId ScheduleDestroy (void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
1160 
1181  template <typename U1, typename U2, typename U3, typename U4, typename U5,
1182  typename T1, typename T2, typename T3, typename T4, typename T5>
1183  static EventId ScheduleDestroy (void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
1184 
1195  template <typename U1, typename U2, typename U3, typename U4, typename U5, typename U6,
1196  typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
1197  static EventId ScheduleDestroy (void (*f)(U1,U2,U3,U4,U5,U6), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6);
1198  // Schedule events to run when Simulator:Destroy() is called.
1200 
1213  static void Remove (const EventId &id);
1214 
1228  static void Cancel (const EventId &id);
1229 
1244  static bool IsExpired (const EventId &id);
1245 
1251  static Time Now (void);
1252 
1261  static Time GetDelayLeft (const EventId &id);
1262 
1271  static Time GetMaximumSimulationTime (void);
1272 
1280  static EventId Schedule (const Time &delay, const Ptr<EventImpl> &event);
1281 
1291  static void ScheduleWithContext (uint32_t context, const Time &delay, EventImpl *event);
1292 
1300  static EventId ScheduleDestroy (const Ptr<EventImpl> &event);
1301 
1308  static EventId ScheduleNow (const Ptr<EventImpl> &event);
1309 
1317  static uint32_t GetSystemId (void);
1318 
1319 private:
1321  Simulator ();
1323  ~Simulator ();
1324 
1331  static EventId DoSchedule (Time const &delay, EventImpl *event);
1337  static EventId DoScheduleNow (EventImpl *event);
1343  static EventId DoScheduleDestroy (EventImpl *event);
1344 };
1345 
1359 Time Now (void);
1360 
1361 } // namespace ns3
1362 
1363 
1364 /********************************************************************
1365  * Implementation of the templates declared above.
1366  ********************************************************************/
1367 
1368 namespace ns3 {
1369 
1370 // Doxygen has trouble with static template functions in a class:
1371 // it treats the in-class declaration as different from the
1372 // out of class definition, so makes two entries in the member list. Ugh
1373 
1374 template <typename MEM, typename OBJ>
1375 EventId Simulator::Schedule (Time const &delay, MEM mem_ptr, OBJ obj)
1376 {
1377  return DoSchedule (delay, MakeEvent (mem_ptr, obj));
1378 }
1379 
1380 
1381 template <typename MEM, typename OBJ,
1382  typename T1>
1383 EventId Simulator::Schedule (Time const &delay, MEM mem_ptr, OBJ obj, T1 a1)
1384 {
1385  return DoSchedule (delay, MakeEvent (mem_ptr, obj, a1));
1386 }
1387 
1388 template <typename MEM, typename OBJ,
1389  typename T1, typename T2>
1390 EventId Simulator::Schedule (Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
1391 {
1392  return DoSchedule (delay, MakeEvent (mem_ptr, obj, a1, a2));
1393 }
1394 
1395 template <typename MEM, typename OBJ,
1396  typename T1, typename T2, typename T3>
1397 EventId Simulator::Schedule (Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
1398 {
1399  return DoSchedule (delay, MakeEvent (mem_ptr, obj, a1, a2, a3));
1400 }
1401 
1402 template <typename MEM, typename OBJ,
1403  typename T1, typename T2, typename T3, typename T4>
1404 EventId Simulator::Schedule (Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4)
1405 {
1406  return DoSchedule (delay, MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
1407 }
1408 
1409 template <typename MEM, typename OBJ,
1410  typename T1, typename T2, typename T3, typename T4, typename T5>
1411 EventId Simulator::Schedule (Time const &delay, MEM mem_ptr, OBJ obj,
1412  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1413 {
1414  return DoSchedule (delay, MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
1415 }
1416 
1417 template <typename MEM, typename OBJ,
1418  typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
1419 EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj,
1420  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6)
1421 {
1422  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5, a6));
1423 }
1424 
1425 template <typename U1,
1426  typename T1>
1427 EventId Simulator::Schedule (Time const &delay, void (*f)(U1), T1 a1)
1428 {
1429  return DoSchedule (delay, MakeEvent (f, a1));
1430 }
1431 
1432 template <typename U1, typename U2,
1433  typename T1, typename T2>
1434 EventId Simulator::Schedule (Time const &delay, void (*f)(U1,U2), T1 a1, T2 a2)
1435 {
1436  return DoSchedule (delay, MakeEvent (f, a1, a2));
1437 }
1438 
1439 template <typename U1, typename U2, typename U3,
1440  typename T1, typename T2, typename T3>
1441 EventId Simulator::Schedule (Time const &delay, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
1442 {
1443  return DoSchedule (delay, MakeEvent (f, a1, a2, a3));
1444 }
1445 
1446 template <typename U1, typename U2, typename U3, typename U4,
1447  typename T1, typename T2, typename T3, typename T4>
1448 EventId Simulator::Schedule (Time const &delay, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
1449 {
1450  return DoSchedule (delay, MakeEvent (f, a1, a2, a3, a4));
1451 }
1452 
1453 template <typename U1, typename U2, typename U3, typename U4, typename U5,
1454  typename T1, typename T2, typename T3, typename T4, typename T5>
1455 EventId Simulator::Schedule (Time const &delay, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1456 {
1457  return DoSchedule (delay, MakeEvent (f, a1, a2, a3, a4, a5));
1458 }
1459 
1460 template <typename U1, typename U2, typename U3, typename U4, typename U5, typename U6,
1461  typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
1462 EventId Simulator::Schedule (Time const &time, void (*f)(U1,U2,U3,U4,U5,U6), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6)
1463 {
1464  return DoSchedule (time, MakeEvent (f, a1, a2, a3, a4, a5, a6));
1465 }
1466 
1467 
1468 template <typename MEM, typename OBJ>
1469 void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj)
1470 {
1471  ScheduleWithContext (context, delay, MakeEvent (mem_ptr, obj));
1472 }
1473 
1474 
1475 template <typename MEM, typename OBJ,
1476  typename T1>
1477 void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj, T1 a1)
1478 {
1479  return ScheduleWithContext (context, delay, MakeEvent (mem_ptr, obj, a1));
1480 }
1481 
1482 template <typename MEM, typename OBJ,
1483  typename T1, typename T2>
1484 void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
1485 {
1486  return ScheduleWithContext (context, delay, MakeEvent (mem_ptr, obj, a1, a2));
1487 }
1488 
1489 template <typename MEM, typename OBJ,
1490  typename T1, typename T2, typename T3>
1491 void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
1492 {
1493  return ScheduleWithContext (context, delay, MakeEvent (mem_ptr, obj, a1, a2, a3));
1494 }
1495 
1496 template <typename MEM, typename OBJ,
1497  typename T1, typename T2, typename T3, typename T4>
1498 void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4)
1499 {
1500  return ScheduleWithContext (context, delay, MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
1501 }
1502 
1503 template <typename MEM, typename OBJ,
1504  typename T1, typename T2, typename T3, typename T4, typename T5>
1505 void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj,
1506  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1507 {
1508  return ScheduleWithContext (context, delay, MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
1509 }
1510 
1511 template <typename MEM, typename OBJ,
1512  typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
1513 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj,
1514  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6)
1515 {
1516  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5, a6));
1517 }
1518 
1519 template <typename U1,
1520  typename T1>
1521 void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1), T1 a1)
1522 {
1523  return ScheduleWithContext (context, delay, MakeEvent (f, a1));
1524 }
1525 
1526 template <typename U1, typename U2,
1527  typename T1, typename T2>
1528 void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1,U2), T1 a1, T2 a2)
1529 {
1530  return ScheduleWithContext (context, delay, MakeEvent (f, a1, a2));
1531 }
1532 
1533 template <typename U1, typename U2, typename U3,
1534  typename T1, typename T2, typename T3>
1535 void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
1536 {
1537  return ScheduleWithContext (context, delay, MakeEvent (f, a1, a2, a3));
1538 }
1539 
1540 template <typename U1, typename U2, typename U3, typename U4,
1541  typename T1, typename T2, typename T3, typename T4>
1542 void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
1543 {
1544  return ScheduleWithContext (context, delay, MakeEvent (f, a1, a2, a3, a4));
1545 }
1546 
1547 template <typename U1, typename U2, typename U3, typename U4, typename U5,
1548  typename T1, typename T2, typename T3, typename T4, typename T5>
1549 void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1550 {
1551  return ScheduleWithContext (context, delay, MakeEvent (f, a1, a2, a3, a4, a5));
1552 }
1553 
1554 template <typename U1, typename U2, typename U3, typename U4, typename U5, typename U6,
1555  typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
1556 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3,U4,U5,U6), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6)
1557 {
1558  return ScheduleWithContext (context, time, MakeEvent (f, a1, a2, a3, a4, a5, a6));
1559 }
1560 
1561 
1562 template <typename MEM, typename OBJ>
1563 EventId
1564 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj)
1565 {
1566  return DoScheduleNow (MakeEvent (mem_ptr, obj));
1567 }
1568 
1569 
1570 template <typename MEM, typename OBJ,
1571  typename T1>
1572 EventId
1573 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1)
1574 {
1575  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1));
1576 }
1577 
1578 template <typename MEM, typename OBJ,
1579  typename T1, typename T2>
1580 EventId
1581 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
1582 {
1583  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1, a2));
1584 }
1585 
1586 template <typename MEM, typename OBJ,
1587  typename T1, typename T2, typename T3>
1588 EventId
1589 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
1590 {
1591  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1, a2, a3));
1592 }
1593 
1594 template <typename MEM, typename OBJ,
1595  typename T1, typename T2, typename T3, typename T4>
1596 EventId
1597 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4)
1598 {
1599  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
1600 }
1601 
1602 template <typename MEM, typename OBJ,
1603  typename T1, typename T2, typename T3, typename T4, typename T5>
1604 EventId
1605 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj,
1606  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1607 {
1608  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
1609 }
1610 
1611 template <typename MEM, typename OBJ,
1612  typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
1613 EventId
1614 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj,
1615  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6)
1616 {
1617  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5, a6));
1618 }
1619 
1620 template <typename U1,
1621  typename T1>
1622 EventId
1623 Simulator::ScheduleNow (void (*f)(U1), T1 a1)
1624 {
1625  return DoScheduleNow (MakeEvent (f, a1));
1626 }
1627 
1628 template <typename U1, typename U2,
1629  typename T1, typename T2>
1630 EventId
1631 Simulator::ScheduleNow (void (*f)(U1,U2), T1 a1, T2 a2)
1632 {
1633  return DoScheduleNow (MakeEvent (f, a1, a2));
1634 }
1635 
1636 template <typename U1, typename U2, typename U3,
1637  typename T1, typename T2, typename T3>
1638 EventId
1639 Simulator::ScheduleNow (void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
1640 {
1641  return DoScheduleNow (MakeEvent (f, a1, a2, a3));
1642 }
1643 
1644 template <typename U1, typename U2, typename U3, typename U4,
1645  typename T1, typename T2, typename T3, typename T4>
1646 EventId
1647 Simulator::ScheduleNow (void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
1648 {
1649  return DoScheduleNow (MakeEvent (f, a1, a2, a3, a4));
1650 }
1651 
1652 template <typename U1, typename U2, typename U3, typename U4, typename U5,
1653  typename T1, typename T2, typename T3, typename T4, typename T5>
1654 EventId
1655 Simulator::ScheduleNow (void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1656 {
1657  return DoScheduleNow (MakeEvent (f, a1, a2, a3, a4, a5));
1658 }
1659 
1660 template <typename U1, typename U2, typename U3, typename U4, typename U5, typename U6,
1661  typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
1662 EventId
1663 Simulator::ScheduleNow (void (*f)(U1,U2,U3,U4,U5,U6), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6)
1664 {
1665  return DoScheduleNow (MakeEvent (f, a1, a2, a3, a4, a5, a6));
1666 }
1667 
1668 
1669 template <typename MEM, typename OBJ>
1670 EventId
1671 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj)
1672 {
1673  return DoScheduleDestroy (MakeEvent (mem_ptr, obj));
1674 }
1675 
1676 
1677 template <typename MEM, typename OBJ,
1678  typename T1>
1679 EventId
1680 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1)
1681 {
1682  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1));
1683 }
1684 
1685 template <typename MEM, typename OBJ,
1686  typename T1, typename T2>
1687 EventId
1688 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
1689 {
1690  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1, a2));
1691 }
1692 
1693 template <typename MEM, typename OBJ,
1694  typename T1, typename T2, typename T3>
1695 EventId
1696 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
1697 {
1698  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1, a2, a3));
1699 }
1700 
1701 template <typename MEM, typename OBJ,
1702  typename T1, typename T2, typename T3, typename T4>
1703 EventId
1704 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4)
1705 {
1706  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
1707 }
1708 
1709 template <typename MEM, typename OBJ,
1710  typename T1, typename T2, typename T3, typename T4, typename T5>
1711 EventId
1712 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj,
1713  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1714 {
1715  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
1716 }
1717 
1718 template <typename MEM, typename OBJ,
1719  typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
1720 EventId
1721 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj,
1722  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6)
1723 {
1724  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5, a6));
1725 }
1726 
1727 template <typename U1,
1728  typename T1>
1729 EventId
1730 Simulator::ScheduleDestroy (void (*f)(U1), T1 a1)
1731 {
1732  return DoScheduleDestroy (MakeEvent (f, a1));
1733 }
1734 
1735 template <typename U1, typename U2,
1736  typename T1, typename T2>
1737 EventId
1738 Simulator::ScheduleDestroy (void (*f)(U1,U2), T1 a1, T2 a2)
1739 {
1740  return DoScheduleDestroy (MakeEvent (f, a1, a2));
1741 }
1742 
1743 template <typename U1, typename U2, typename U3,
1744  typename T1, typename T2, typename T3>
1745 EventId
1746 Simulator::ScheduleDestroy (void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
1747 {
1748  return DoScheduleDestroy (MakeEvent (f, a1, a2, a3));
1749 }
1750 
1751 template <typename U1, typename U2, typename U3, typename U4,
1752  typename T1, typename T2, typename T3, typename T4>
1753 EventId
1754 Simulator::ScheduleDestroy (void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
1755 {
1756  return DoScheduleDestroy (MakeEvent (f, a1, a2, a3, a4));
1757 }
1758 
1759 template <typename U1, typename U2, typename U3, typename U4, typename U5,
1760  typename T1, typename T2, typename T3, typename T4, typename T5>
1761 EventId
1762 Simulator::ScheduleDestroy (void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1763 {
1764  return DoScheduleDestroy (MakeEvent (f, a1, a2, a3, a4, a5));
1765 }
1766 
1767 template <typename U1, typename U2, typename U3, typename U4, typename U5, typename U6,
1768  typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
1769 EventId
1770 Simulator::ScheduleDestroy (void (*f)(U1,U2,U3,U4,U5,U6), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6)
1771 {
1772  return DoScheduleDestroy (MakeEvent (f, a1, a2, a3, a4, a5, a6));
1773 }
1774 
1775 } // namespace ns3
1776 
1777 #endif /* SIMULATOR_H */
static Time GetDelayLeft(const EventId &id)
Get the remaining time until this event will execute.
Definition: simulator.cc:258
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
Control the scheduling of simulation events.
Definition: simulator.h:68
ns3::EventImpl declarations.
static void SetImplementation(Ptr< SimulatorImpl > impl)
Definition: simulator.cc:399
static EventId DoScheduleDestroy(EventImpl *event)
Implementation of the various ScheduleDestroy methods.
Definition: simulator.cc:305
static Ptr< SimulatorImpl > GetImplementation(void)
Get the SimulatorImpl singleton.
Definition: simulator.cc:425
static uint32_t GetSystemId(void)
Get the system id of this simulator.
Definition: simulator.cc:384
static uint32_t GetContext(void)
Get the current simulation context.
Definition: simulator.cc:378
ns3::ObjectFactory class declaration.
static void Run(void)
Run the simulation.
Definition: simulator.cc:226
static void Cancel(const EventId &id)
Set the cancel bit on this event: the event's associated function will not be invoked when it expires...
Definition: simulator.cc:346
void(* Time)(Time oldValue, Time newValue)
TracedValue callback signature for Time.
Definition: nstime.h:719
static EventId Schedule(Time const &delay, MEM mem_ptr, OBJ obj)
Schedule an event to expire after delay.
Definition: simulator.h:1375
ns3::MakeEvent function declarations and template implementation.
Declaration of classes ns3::Time and ns3::TimeWithUnit, and the TimeValue implementation classes...
~Simulator()
Destructor.
static EventId DoSchedule(Time const &delay, EventImpl *event)
Implementation of the various Schedule methods.
Definition: simulator.cc:289
static void Destroy(void)
Execute the events scheduled with ScheduleDestroy().
Definition: simulator.cc:190
double f(double x, void *params)
Definition: 80211b.c:72
static void Remove(const EventId &id)
Remove an event from the event list.
Definition: simulator.cc:336
Every class exported by the ns3 library is enclosed in the ns3 namespace.
static bool IsExpired(const EventId &id)
Check if an event has already run or been cancelled.
Definition: simulator.cc:356
Simulator()
Default constructor.
static EventId ScheduleNow(MEM mem_ptr, OBJ obj)
Schedule an event to expire Now.
Definition: simulator.h:1564
static void SetScheduler(ObjectFactory schedulerFactory)
Set the scheduler type with an ObjectFactory.
Definition: simulator.cc:212
static Time Now(void)
Return the current simulation virtual time.
Definition: simulator.cc:249
Flag for events not associated with any particular context.
Definition: simulator.h:192
Instantiate subclasses of ns3::Object.
static void ScheduleWithContext(uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj)
Schedule an event with the given context.
Definition: simulator.h:1469
A simulation event.
Definition: event-impl.h:44
static EventId DoScheduleNow(EventImpl *event)
Implementation of the various ScheduleNow methods.
Definition: simulator.cc:297
An identifier for simulation events.
Definition: event-id.h:53
static void Stop(void)
Tell the Simulator the calling event should be the last one executed.
Definition: simulator.cc:234
static bool IsFinished(void)
Check if the simulation should finish.
Definition: simulator.cc:219
static EventId ScheduleDestroy(MEM mem_ptr, OBJ obj)
Schedule an event to expire when Simulator::Destroy is called.
Definition: simulator.h:1671
Time Now(void)
create an ns3::Time instance which contains the current simulation time.
Definition: simulator.cc:365
ns3::EventId declarations.
static Time GetMaximumSimulationTime(void)
Get the maximum representable simulation time.
Definition: simulator.cc:371
EventImpl * MakeEvent(void(*f)(void))
Make an EventImpl from a function pointer taking varying numbers of arguments.
Definition: make-event.cc:34