A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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 "deprecated.h"
30 #include "object-factory.h"
31 
32 #include <stdint.h>
33 #include <string>
34 
35 namespace ns3 {
36 
37 class SimulatorImpl;
38 class Scheduler;
39 
62 class Simulator
63 {
64 public:
77  static void SetImplementation (Ptr<SimulatorImpl> impl);
78 
80 
88  static void SetScheduler (ObjectFactory schedulerFactory);
89 
100  static void Destroy (void);
101 
107  static bool IsFinished (void);
108 
117  static void Run (void);
118 
124  static void Stop (void);
125 
133  static void Stop (Time const &time);
134 
149  template <typename MEM, typename OBJ>
150  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj);
151 
159  template <typename MEM, typename OBJ, typename T1>
160  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1);
161 
170  template <typename MEM, typename OBJ, typename T1, typename T2>
171  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
172 
182  template <typename MEM, typename OBJ,
183  typename T1, typename T2, typename T3>
184  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
185 
196  template <typename MEM, typename OBJ,
197  typename T1, typename T2, typename T3, typename T4>
198  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4);
199 
211  template <typename MEM, typename OBJ,
212  typename T1, typename T2, typename T3, typename T4, typename T5>
213  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj,
214  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
220  static EventId Schedule (Time const &time, void (*f)(void));
221 
228  template <typename U1, typename T1>
229  static EventId Schedule (Time const &time, void (*f)(U1), T1 a1);
230 
238  template <typename U1, typename U2, typename T1, typename T2>
239  static EventId Schedule (Time const &time, void (*f)(U1,U2), T1 a1, T2 a2);
240 
249  template <typename U1, typename U2, typename U3, typename T1, typename T2, typename T3>
250  static EventId Schedule (Time const &time, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
251 
261  template <typename U1, typename U2, typename U3, typename U4,
262  typename T1, typename T2, typename T3, typename T4>
263  static EventId Schedule (Time const &time, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
264 
275  template <typename U1, typename U2, typename U3, typename U4, typename U5,
276  typename T1, typename T2, typename T3, typename T4, typename T5>
277  static EventId Schedule (Time const &time, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
278 
289  template <typename MEM, typename OBJ>
290  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj);
291 
301  template <typename MEM, typename OBJ, typename T1>
302  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1);
303 
314  template <typename MEM, typename OBJ, typename T1, typename T2>
315  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
316 
328  template <typename MEM, typename OBJ,
329  typename T1, typename T2, typename T3>
330  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
331 
344  template <typename MEM, typename OBJ,
345  typename T1, typename T2, typename T3, typename T4>
346  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4);
347 
361  template <typename MEM, typename OBJ,
362  typename T1, typename T2, typename T3, typename T4, typename T5>
363  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj,
364  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
372  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(void));
373 
382  template <typename U1, typename T1>
383  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1), T1 a1);
384 
394  template <typename U1, typename U2, typename T1, typename T2>
395  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2), T1 a1, T2 a2);
396 
407  template <typename U1, typename U2, typename U3, typename T1, typename T2, typename T3>
408  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
409 
421  template <typename U1, typename U2, typename U3, typename U4,
422  typename T1, typename T2, typename T3, typename T4>
423  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
424 
437  template <typename U1, typename U2, typename U3, typename U4, typename U5,
438  typename T1, typename T2, typename T3, typename T4, typename T5>
439  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
440 
449  template <typename MEM, typename OBJ>
450  static EventId ScheduleNow (MEM mem_ptr, OBJ obj);
451 
457  template <typename MEM, typename OBJ,
458  typename T1>
459  static EventId ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1);
460 
467  template <typename MEM, typename OBJ,
468  typename T1, typename T2>
469  static EventId ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
470 
478  template <typename MEM, typename OBJ,
479  typename T1, typename T2, typename T3>
480  static EventId ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
481 
490  template <typename MEM, typename OBJ,
491  typename T1, typename T2, typename T3, typename T4>
492  static EventId ScheduleNow (MEM mem_ptr, OBJ obj,
493  T1 a1, T2 a2, T3 a3, T4 a4);
503  template <typename MEM, typename OBJ,
504  typename T1, typename T2, typename T3, typename T4, typename T5>
505  static EventId ScheduleNow (MEM mem_ptr, OBJ obj,
506  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
510  static EventId ScheduleNow (void (*f)(void));
511 
516  template <typename U1,
517  typename T1>
518  static EventId ScheduleNow (void (*f)(U1), T1 a1);
519 
525  template <typename U1, typename U2,
526  typename T1, typename T2>
527  static EventId ScheduleNow (void (*f)(U1,U2), T1 a1, T2 a2);
528 
535  template <typename U1, typename U2, typename U3,
536  typename T1, typename T2, typename T3>
537  static EventId ScheduleNow (void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
538 
546  template <typename U1, typename U2, typename U3, typename U4,
547  typename T1, typename T2, typename T3, typename T4>
548  static EventId ScheduleNow (void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
549 
558  template <typename U1, typename U2, typename U3, typename U4, typename U5,
559  typename T1, typename T2, typename T3, typename T4, typename T5>
560  static EventId ScheduleNow (void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
561 
571  template <typename MEM, typename OBJ>
572  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj);
573 
579  template <typename MEM, typename OBJ,
580  typename T1>
581  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1);
582 
589  template <typename MEM, typename OBJ,
590  typename T1, typename T2>
591  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
592 
600  template <typename MEM, typename OBJ,
601  typename T1, typename T2, typename T3>
602  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
603 
612  template <typename MEM, typename OBJ,
613  typename T1, typename T2, typename T3, typename T4>
614  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj,
615  T1 a1, T2 a2, T3 a3, T4 a4);
625  template <typename MEM, typename OBJ,
626  typename T1, typename T2, typename T3, typename T4, typename T5>
627  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj,
628  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
632  static EventId ScheduleDestroy (void (*f)(void));
633 
638  template <typename U1,
639  typename T1>
640  static EventId ScheduleDestroy (void (*f)(U1), T1 a1);
641 
647  template <typename U1, typename U2,
648  typename T1, typename T2>
649  static EventId ScheduleDestroy (void (*f)(U1,U2), T1 a1, T2 a2);
650 
657  template <typename U1, typename U2, typename U3,
658  typename T1, typename T2, typename T3>
659  static EventId ScheduleDestroy (void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
660 
668  template <typename U1, typename U2, typename U3, typename U4,
669  typename T1, typename T2, typename T3, typename T4>
670  static EventId ScheduleDestroy (void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
671 
680  template <typename U1, typename U2, typename U3, typename U4, typename U5,
681  typename T1, typename T2, typename T3, typename T4, typename T5>
682  static EventId ScheduleDestroy (void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
683 
695  static void Remove (const EventId &id);
696 
709  static void Cancel (const EventId &id);
710 
723  static bool IsExpired (const EventId &id);
724 
728  static Time Now (void);
729 
736  static Time GetDelayLeft (const EventId &id);
737 
744  static Time GetMaximumSimulationTime (void);
745 
749  static uint32_t GetContext (void);
750 
759  static EventId Schedule (Time const &time, const Ptr<EventImpl> &event);
760 
772  static void ScheduleWithContext (uint32_t context, const Time &time, EventImpl *event);
773 
781  static EventId ScheduleDestroy (const Ptr<EventImpl> &event);
782 
790  static EventId ScheduleNow (const Ptr<EventImpl> &event);
791 
796  static uint32_t GetSystemId (void);
797 private:
798  Simulator ();
799  ~Simulator ();
800 
801  static EventId DoSchedule (Time const &time, EventImpl *event);
802  static EventId DoScheduleNow (EventImpl *event);
803  static EventId DoScheduleDestroy (EventImpl *event);
804 };
805 
817 Time Now (void);
818 
819 } // namespace ns3
820 
821 namespace ns3 {
822 
823 template <typename MEM, typename OBJ>
824 EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj)
825 {
826  return DoSchedule (time, MakeEvent (mem_ptr, obj));
827 }
828 
829 
830 template <typename MEM, typename OBJ,
831  typename T1>
832 EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1)
833 {
834  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1));
835 }
836 
837 template <typename MEM, typename OBJ,
838  typename T1, typename T2>
839 EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
840 {
841  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1, a2));
842 }
843 
844 template <typename MEM, typename OBJ,
845  typename T1, typename T2, typename T3>
846 EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
847 {
848  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1, a2, a3));
849 }
850 
851 template <typename MEM, typename OBJ,
852  typename T1, typename T2, typename T3, typename T4>
853 EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4)
854 {
855  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
856 }
857 
858 template <typename MEM, typename OBJ,
859  typename T1, typename T2, typename T3, typename T4, typename T5>
860 EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj,
861  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
862 {
863  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
864 }
865 
866 template <typename U1, typename T1>
867 EventId Simulator::Schedule (Time const &time, void (*f)(U1), T1 a1)
868 {
869  return DoSchedule (time, MakeEvent (f, a1));
870 }
871 
872 template <typename U1, typename U2,
873  typename T1, typename T2>
874 EventId Simulator::Schedule (Time const &time, void (*f)(U1,U2), T1 a1, T2 a2)
875 {
876  return DoSchedule (time, MakeEvent (f, a1, a2));
877 }
878 
879 template <typename U1, typename U2, typename U3,
880  typename T1, typename T2, typename T3>
881 EventId Simulator::Schedule (Time const &time, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
882 {
883  return DoSchedule (time, MakeEvent (f, a1, a2, a3));
884 }
885 
886 template <typename U1, typename U2, typename U3, typename U4,
887  typename T1, typename T2, typename T3, typename T4>
888 EventId Simulator::Schedule (Time const &time, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
889 {
890  return DoSchedule (time, MakeEvent (f, a1, a2, a3, a4));
891 }
892 
893 template <typename U1, typename U2, typename U3, typename U4, typename U5,
894  typename T1, typename T2, typename T3, typename T4, typename T5>
895 EventId Simulator::Schedule (Time const &time, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
896 {
897  return DoSchedule (time, MakeEvent (f, a1, a2, a3, a4, a5));
898 }
899 
900 
901 
902 
903 template <typename MEM, typename OBJ>
904 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj)
905 {
906  ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj));
907 }
908 
909 
910 template <typename MEM, typename OBJ,
911  typename T1>
912 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1)
913 {
914  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1));
915 }
916 
917 template <typename MEM, typename OBJ,
918  typename T1, typename T2>
919 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
920 {
921  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1, a2));
922 }
923 
924 template <typename MEM, typename OBJ,
925  typename T1, typename T2, typename T3>
926 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
927 {
928  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1, a2, a3));
929 }
930 
931 template <typename MEM, typename OBJ,
932  typename T1, typename T2, typename T3, typename T4>
933 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4)
934 {
935  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
936 }
937 
938 template <typename MEM, typename OBJ,
939  typename T1, typename T2, typename T3, typename T4, typename T5>
940 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj,
941  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
942 {
943  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
944 }
945 
946 template <typename U1, typename T1>
947 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1), T1 a1)
948 {
949  return ScheduleWithContext (context, time, MakeEvent (f, a1));
950 }
951 
952 template <typename U1, typename U2,
953  typename T1, typename T2>
954 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2), T1 a1, T2 a2)
955 {
956  return ScheduleWithContext (context, time, MakeEvent (f, a1, a2));
957 }
958 
959 template <typename U1, typename U2, typename U3,
960  typename T1, typename T2, typename T3>
961 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
962 {
963  return ScheduleWithContext (context, time, MakeEvent (f, a1, a2, a3));
964 }
965 
966 template <typename U1, typename U2, typename U3, typename U4,
967  typename T1, typename T2, typename T3, typename T4>
968 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
969 {
970  return ScheduleWithContext (context, time, MakeEvent (f, a1, a2, a3, a4));
971 }
972 
973 template <typename U1, typename U2, typename U3, typename U4, typename U5,
974  typename T1, typename T2, typename T3, typename T4, typename T5>
975 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
976 {
977  return ScheduleWithContext (context, time, MakeEvent (f, a1, a2, a3, a4, a5));
978 }
979 
980 
981 
982 
983 template <typename MEM, typename OBJ>
984 EventId
985 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj)
986 {
987  return DoScheduleNow (MakeEvent (mem_ptr, obj));
988 }
989 
990 
991 template <typename MEM, typename OBJ,
992  typename T1>
993 EventId
994 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1)
995 {
996  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1));
997 }
998 
999 template <typename MEM, typename OBJ,
1000  typename T1, typename T2>
1001 EventId
1002 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
1003 {
1004  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1, a2));
1005 }
1006 
1007 template <typename MEM, typename OBJ,
1008  typename T1, typename T2, typename T3>
1009 EventId
1010 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
1011 {
1012  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1, a2, a3));
1013 }
1014 
1015 template <typename MEM, typename OBJ,
1016  typename T1, typename T2, typename T3, typename T4>
1017 EventId
1018 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4)
1019 {
1020  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
1021 }
1022 
1023 template <typename MEM, typename OBJ,
1024  typename T1, typename T2, typename T3, typename T4, typename T5>
1025 EventId
1026 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj,
1027  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1028 {
1029  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
1030 }
1031 
1032 template <typename U1,
1033  typename T1>
1034 EventId
1035 Simulator::ScheduleNow (void (*f)(U1), T1 a1)
1036 {
1037  return DoScheduleNow (MakeEvent (f, a1));
1038 }
1039 
1040 template <typename U1, typename U2,
1041  typename T1, typename T2>
1042 EventId
1043 Simulator::ScheduleNow (void (*f)(U1,U2), T1 a1, T2 a2)
1044 {
1045  return DoScheduleNow (MakeEvent (f, a1, a2));
1046 }
1047 
1048 template <typename U1, typename U2, typename U3,
1049  typename T1, typename T2, typename T3>
1050 EventId
1051 Simulator::ScheduleNow (void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
1052 {
1053  return DoScheduleNow (MakeEvent (f, a1, a2, a3));
1054 }
1055 
1056 template <typename U1, typename U2, typename U3, typename U4,
1057  typename T1, typename T2, typename T3, typename T4>
1058 EventId
1059 Simulator::ScheduleNow (void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
1060 {
1061  return DoScheduleNow (MakeEvent (f, a1, a2, a3, a4));
1062 }
1063 
1064 template <typename U1, typename U2, typename U3, typename U4, typename U5,
1065  typename T1, typename T2, typename T3, typename T4, typename T5>
1066 EventId
1067 Simulator::ScheduleNow (void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1068 {
1069  return DoScheduleNow (MakeEvent (f, a1, a2, a3, a4, a5));
1070 }
1071 
1072 
1073 
1074 template <typename MEM, typename OBJ>
1075 EventId
1076 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj)
1077 {
1078  return DoScheduleDestroy (MakeEvent (mem_ptr, obj));
1079 }
1080 
1081 
1082 template <typename MEM, typename OBJ,
1083  typename T1>
1084 EventId
1085 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1)
1086 {
1087  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1));
1088 }
1089 
1090 template <typename MEM, typename OBJ,
1091  typename T1, typename T2>
1092 EventId
1093 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
1094 {
1095  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1, a2));
1096 }
1097 
1098 template <typename MEM, typename OBJ,
1099  typename T1, typename T2, typename T3>
1100 EventId
1101 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
1102 {
1103  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1, a2, a3));
1104 }
1105 
1106 template <typename MEM, typename OBJ,
1107  typename T1, typename T2, typename T3, typename T4>
1108 EventId
1109 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4)
1110 {
1111  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
1112 }
1113 
1114 template <typename MEM, typename OBJ,
1115  typename T1, typename T2, typename T3, typename T4, typename T5>
1116 EventId
1117 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj,
1118  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1119 {
1120  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
1121 }
1122 
1123 template <typename U1,
1124  typename T1>
1125 EventId
1126 Simulator::ScheduleDestroy (void (*f)(U1), T1 a1)
1127 {
1128  return DoScheduleDestroy (MakeEvent (f, a1));
1129 }
1130 
1131 template <typename U1, typename U2,
1132  typename T1, typename T2>
1133 EventId
1134 Simulator::ScheduleDestroy (void (*f)(U1,U2), T1 a1, T2 a2)
1135 {
1136  return DoScheduleDestroy (MakeEvent (f, a1, a2));
1137 }
1138 
1139 template <typename U1, typename U2, typename U3,
1140  typename T1, typename T2, typename T3>
1141 EventId
1142 Simulator::ScheduleDestroy (void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
1143 {
1144  return DoScheduleDestroy (MakeEvent (f, a1, a2, a3));
1145 }
1146 
1147 template <typename U1, typename U2, typename U3, typename U4,
1148  typename T1, typename T2, typename T3, typename T4>
1149 EventId
1150 Simulator::ScheduleDestroy (void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
1151 {
1152  return DoScheduleDestroy (MakeEvent (f, a1, a2, a3, a4));
1153 }
1154 
1155 template <typename U1, typename U2, typename U3, typename U4, typename U5,
1156  typename T1, typename T2, typename T3, typename T4, typename T5>
1157 EventId
1158 Simulator::ScheduleDestroy (void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1159 {
1160  return DoScheduleDestroy (MakeEvent (f, a1, a2, a3, a4, a5));
1161 }
1162 
1163 } // namespace ns3
1164 
1165 #endif /* SIMULATOR_H */
static Time GetDelayLeft(const EventId &id)
Definition: simulator.cc:189
keep track of time values and allow control of global simulation resolution
Definition: nstime.h:81
smart pointer class similar to boost::intrusive_ptr
Definition: ptr.h:59
Control the scheduling of simulation events.
Definition: simulator.h:62
static void SetImplementation(Ptr< SimulatorImpl > impl)
Definition: simulator.cc:321
static EventId DoScheduleDestroy(EventImpl *event)
Definition: simulator.cc:227
static Ptr< SimulatorImpl > GetImplementation(void)
Definition: simulator.cc:346
static uint32_t GetSystemId(void)
Definition: simulator.cc:306
static uint32_t GetContext(void)
Definition: simulator.cc:300
static void Run(void)
Run the simulation until one of:
Definition: simulator.cc:157
static EventId DoSchedule(Time const &time, EventImpl *event)
Definition: simulator.cc:217
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:268
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
Schedule an event to expire at the relative time "time" is reached.
Definition: simulator.h:824
static void ScheduleWithContext(uint32_t context, Time const &time, MEM mem_ptr, OBJ obj)
Schedule an event with the given context.
Definition: simulator.h:904
static void Destroy(void)
Every event scheduled by the Simulator::insertAtDestroy method is invoked.
Definition: simulator.cc:121
static void Remove(const EventId &id)
Remove an event from the event list.
Definition: simulator.cc:258
static bool IsExpired(const EventId &id)
This method has O(1) complexity.
Definition: simulator.cc:278
static EventId ScheduleNow(MEM mem_ptr, OBJ obj)
Schedule an event to expire Now.
Definition: simulator.h:985
static void SetScheduler(ObjectFactory schedulerFactory)
Definition: simulator.cc:143
static Time Now(void)
Return the "current simulation time".
Definition: simulator.cc:180
instantiate subclasses of ns3::Object.
a simulation event
Definition: event-impl.h:39
static EventId DoScheduleNow(EventImpl *event)
Definition: simulator.cc:222
an identifier for simulation events.
Definition: event-id.h:46
static void Stop(void)
If an event invokes this method, it will be the last event scheduled by the Simulator::run method bef...
Definition: simulator.cc:165
Time Now(void)
create an ns3::Time instance which contains the current simulation time.
Definition: simulator.cc:287
static bool IsFinished(void)
If there are no more events lefts to be scheduled, or if simulation time has already reached the "sto...
Definition: simulator.cc:150
EventImpl * MakeEvent(void(*f)(void))
Definition: make-event.cc:8
static EventId ScheduleDestroy(MEM mem_ptr, OBJ obj)
Schedule an event to expire at Destroy time.
Definition: simulator.h:1076
static Time GetMaximumSimulationTime(void)
Definition: simulator.cc:293