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 
63 class Simulator
64 {
65 public:
78  static void SetImplementation (Ptr<SimulatorImpl> impl);
79 
81 
89  static void SetScheduler (ObjectFactory schedulerFactory);
90 
101  static void Destroy (void);
102 
108  static bool IsFinished (void);
109 
118  static void Run (void);
119 
125  static void Stop (void);
126 
134  static void Stop (Time const &time);
135 
150  template <typename MEM, typename OBJ>
151  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj);
152 
160  template <typename MEM, typename OBJ, typename T1>
161  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1);
162 
171  template <typename MEM, typename OBJ, typename T1, typename T2>
172  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
173 
183  template <typename MEM, typename OBJ,
184  typename T1, typename T2, typename T3>
185  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
186 
197  template <typename MEM, typename OBJ,
198  typename T1, typename T2, typename T3, typename T4>
199  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4);
200 
212  template <typename MEM, typename OBJ,
213  typename T1, typename T2, typename T3, typename T4, typename T5>
214  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj,
215  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
221  static EventId Schedule (Time const &time, void (*f)(void));
222 
229  template <typename U1, typename T1>
230  static EventId Schedule (Time const &time, void (*f)(U1), T1 a1);
231 
239  template <typename U1, typename U2, typename T1, typename T2>
240  static EventId Schedule (Time const &time, void (*f)(U1,U2), T1 a1, T2 a2);
241 
250  template <typename U1, typename U2, typename U3, typename T1, typename T2, typename T3>
251  static EventId Schedule (Time const &time, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
252 
262  template <typename U1, typename U2, typename U3, typename U4,
263  typename T1, typename T2, typename T3, typename T4>
264  static EventId Schedule (Time const &time, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
265 
276  template <typename U1, typename U2, typename U3, typename U4, typename U5,
277  typename T1, typename T2, typename T3, typename T4, typename T5>
278  static EventId Schedule (Time const &time, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
279 
290  template <typename MEM, typename OBJ>
291  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj);
292 
302  template <typename MEM, typename OBJ, typename T1>
303  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1);
304 
315  template <typename MEM, typename OBJ, typename T1, typename T2>
316  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
317 
329  template <typename MEM, typename OBJ,
330  typename T1, typename T2, typename T3>
331  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
332 
345  template <typename MEM, typename OBJ,
346  typename T1, typename T2, typename T3, typename T4>
347  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4);
348 
362  template <typename MEM, typename OBJ,
363  typename T1, typename T2, typename T3, typename T4, typename T5>
364  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj,
365  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
373  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(void));
374 
383  template <typename U1, typename T1>
384  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1), T1 a1);
385 
395  template <typename U1, typename U2, typename T1, typename T2>
396  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2), T1 a1, T2 a2);
397 
408  template <typename U1, typename U2, typename U3, typename T1, typename T2, typename T3>
409  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
410 
422  template <typename U1, typename U2, typename U3, typename U4,
423  typename T1, typename T2, typename T3, typename T4>
424  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
425 
438  template <typename U1, typename U2, typename U3, typename U4, typename U5,
439  typename T1, typename T2, typename T3, typename T4, typename T5>
440  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);
441 
450  template <typename MEM, typename OBJ>
451  static EventId ScheduleNow (MEM mem_ptr, OBJ obj);
452 
458  template <typename MEM, typename OBJ,
459  typename T1>
460  static EventId ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1);
461 
468  template <typename MEM, typename OBJ,
469  typename T1, typename T2>
470  static EventId ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
471 
479  template <typename MEM, typename OBJ,
480  typename T1, typename T2, typename T3>
481  static EventId ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
482 
491  template <typename MEM, typename OBJ,
492  typename T1, typename T2, typename T3, typename T4>
493  static EventId ScheduleNow (MEM mem_ptr, OBJ obj,
494  T1 a1, T2 a2, T3 a3, T4 a4);
504  template <typename MEM, typename OBJ,
505  typename T1, typename T2, typename T3, typename T4, typename T5>
506  static EventId ScheduleNow (MEM mem_ptr, OBJ obj,
507  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
511  static EventId ScheduleNow (void (*f)(void));
512 
517  template <typename U1,
518  typename T1>
519  static EventId ScheduleNow (void (*f)(U1), T1 a1);
520 
526  template <typename U1, typename U2,
527  typename T1, typename T2>
528  static EventId ScheduleNow (void (*f)(U1,U2), T1 a1, T2 a2);
529 
536  template <typename U1, typename U2, typename U3,
537  typename T1, typename T2, typename T3>
538  static EventId ScheduleNow (void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
539 
547  template <typename U1, typename U2, typename U3, typename U4,
548  typename T1, typename T2, typename T3, typename T4>
549  static EventId ScheduleNow (void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
550 
559  template <typename U1, typename U2, typename U3, typename U4, typename U5,
560  typename T1, typename T2, typename T3, typename T4, typename T5>
561  static EventId ScheduleNow (void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
562 
572  template <typename MEM, typename OBJ>
573  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj);
574 
580  template <typename MEM, typename OBJ,
581  typename T1>
582  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1);
583 
590  template <typename MEM, typename OBJ,
591  typename T1, typename T2>
592  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
593 
601  template <typename MEM, typename OBJ,
602  typename T1, typename T2, typename T3>
603  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
604 
613  template <typename MEM, typename OBJ,
614  typename T1, typename T2, typename T3, typename T4>
615  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj,
616  T1 a1, T2 a2, T3 a3, T4 a4);
626  template <typename MEM, typename OBJ,
627  typename T1, typename T2, typename T3, typename T4, typename T5>
628  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj,
629  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
633  static EventId ScheduleDestroy (void (*f)(void));
634 
639  template <typename U1,
640  typename T1>
641  static EventId ScheduleDestroy (void (*f)(U1), T1 a1);
642 
648  template <typename U1, typename U2,
649  typename T1, typename T2>
650  static EventId ScheduleDestroy (void (*f)(U1,U2), T1 a1, T2 a2);
651 
658  template <typename U1, typename U2, typename U3,
659  typename T1, typename T2, typename T3>
660  static EventId ScheduleDestroy (void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
661 
669  template <typename U1, typename U2, typename U3, typename U4,
670  typename T1, typename T2, typename T3, typename T4>
671  static EventId ScheduleDestroy (void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
672 
681  template <typename U1, typename U2, typename U3, typename U4, typename U5,
682  typename T1, typename T2, typename T3, typename T4, typename T5>
683  static EventId ScheduleDestroy (void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
684 
696  static void Remove (const EventId &id);
697 
710  static void Cancel (const EventId &id);
711 
724  static bool IsExpired (const EventId &id);
725 
729  static Time Now (void);
730 
737  static Time GetDelayLeft (const EventId &id);
738 
745  static Time GetMaximumSimulationTime (void);
746 
750  static uint32_t GetContext (void);
751 
760  static EventId Schedule (Time const &time, const Ptr<EventImpl> &event);
761 
773  static void ScheduleWithContext (uint32_t context, const Time &time, EventImpl *event);
774 
782  static EventId ScheduleDestroy (const Ptr<EventImpl> &event);
783 
791  static EventId ScheduleNow (const Ptr<EventImpl> &event);
792 
797  static uint32_t GetSystemId (void);
798 private:
799  Simulator ();
800  ~Simulator ();
801 
802  static EventId DoSchedule (Time const &time, EventImpl *event);
803  static EventId DoScheduleNow (EventImpl *event);
804  static EventId DoScheduleDestroy (EventImpl *event);
805 };
806 
818 Time Now (void);
819 
820 } // namespace ns3
821 
822 namespace ns3 {
823 
824 template <typename MEM, typename OBJ>
825 EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj)
826 {
827  return DoSchedule (time, MakeEvent (mem_ptr, obj));
828 }
829 
830 
831 template <typename MEM, typename OBJ,
832  typename T1>
833 EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1)
834 {
835  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1));
836 }
837 
838 template <typename MEM, typename OBJ,
839  typename T1, typename T2>
840 EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
841 {
842  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1, a2));
843 }
844 
845 template <typename MEM, typename OBJ,
846  typename T1, typename T2, typename T3>
847 EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
848 {
849  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1, a2, a3));
850 }
851 
852 template <typename MEM, typename OBJ,
853  typename T1, typename T2, typename T3, typename T4>
854 EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4)
855 {
856  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
857 }
858 
859 template <typename MEM, typename OBJ,
860  typename T1, typename T2, typename T3, typename T4, typename T5>
861 EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj,
862  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
863 {
864  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
865 }
866 
867 template <typename U1, typename T1>
868 EventId Simulator::Schedule (Time const &time, void (*f)(U1), T1 a1)
869 {
870  return DoSchedule (time, MakeEvent (f, a1));
871 }
872 
873 template <typename U1, typename U2,
874  typename T1, typename T2>
875 EventId Simulator::Schedule (Time const &time, void (*f)(U1,U2), T1 a1, T2 a2)
876 {
877  return DoSchedule (time, MakeEvent (f, a1, a2));
878 }
879 
880 template <typename U1, typename U2, typename U3,
881  typename T1, typename T2, typename T3>
882 EventId Simulator::Schedule (Time const &time, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
883 {
884  return DoSchedule (time, MakeEvent (f, a1, a2, a3));
885 }
886 
887 template <typename U1, typename U2, typename U3, typename U4,
888  typename T1, typename T2, typename T3, typename T4>
889 EventId Simulator::Schedule (Time const &time, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
890 {
891  return DoSchedule (time, MakeEvent (f, a1, a2, a3, a4));
892 }
893 
894 template <typename U1, typename U2, typename U3, typename U4, typename U5,
895  typename T1, typename T2, typename T3, typename T4, typename T5>
896 EventId Simulator::Schedule (Time const &time, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
897 {
898  return DoSchedule (time, MakeEvent (f, a1, a2, a3, a4, a5));
899 }
900 
901 
902 
903 
904 template <typename MEM, typename OBJ>
905 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj)
906 {
907  ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj));
908 }
909 
910 
911 template <typename MEM, typename OBJ,
912  typename T1>
913 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1)
914 {
915  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1));
916 }
917 
918 template <typename MEM, typename OBJ,
919  typename T1, typename T2>
920 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
921 {
922  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1, a2));
923 }
924 
925 template <typename MEM, typename OBJ,
926  typename T1, typename T2, typename T3>
927 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
928 {
929  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1, a2, a3));
930 }
931 
932 template <typename MEM, typename OBJ,
933  typename T1, typename T2, typename T3, typename T4>
934 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4)
935 {
936  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
937 }
938 
939 template <typename MEM, typename OBJ,
940  typename T1, typename T2, typename T3, typename T4, typename T5>
941 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj,
942  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
943 {
944  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
945 }
946 
947 template <typename U1, typename T1>
948 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1), T1 a1)
949 {
950  return ScheduleWithContext (context, time, MakeEvent (f, a1));
951 }
952 
953 template <typename U1, typename U2,
954  typename T1, typename T2>
955 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2), T1 a1, T2 a2)
956 {
957  return ScheduleWithContext (context, time, MakeEvent (f, a1, a2));
958 }
959 
960 template <typename U1, typename U2, typename U3,
961  typename T1, typename T2, typename T3>
962 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
963 {
964  return ScheduleWithContext (context, time, MakeEvent (f, a1, a2, a3));
965 }
966 
967 template <typename U1, typename U2, typename U3, typename U4,
968  typename T1, typename T2, typename T3, typename T4>
969 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
970 {
971  return ScheduleWithContext (context, time, MakeEvent (f, a1, a2, a3, a4));
972 }
973 
974 template <typename U1, typename U2, typename U3, typename U4, typename U5,
975  typename T1, typename T2, typename T3, typename T4, typename T5>
976 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)
977 {
978  return ScheduleWithContext (context, time, MakeEvent (f, a1, a2, a3, a4, a5));
979 }
980 
981 
982 
983 
984 template <typename MEM, typename OBJ>
985 EventId
986 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj)
987 {
988  return DoScheduleNow (MakeEvent (mem_ptr, obj));
989 }
990 
991 
992 template <typename MEM, typename OBJ,
993  typename T1>
994 EventId
995 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1)
996 {
997  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1));
998 }
999 
1000 template <typename MEM, typename OBJ,
1001  typename T1, typename T2>
1002 EventId
1003 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
1004 {
1005  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1, a2));
1006 }
1007 
1008 template <typename MEM, typename OBJ,
1009  typename T1, typename T2, typename T3>
1010 EventId
1011 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
1012 {
1013  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1, a2, a3));
1014 }
1015 
1016 template <typename MEM, typename OBJ,
1017  typename T1, typename T2, typename T3, typename T4>
1018 EventId
1019 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4)
1020 {
1021  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
1022 }
1023 
1024 template <typename MEM, typename OBJ,
1025  typename T1, typename T2, typename T3, typename T4, typename T5>
1026 EventId
1027 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj,
1028  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1029 {
1030  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
1031 }
1032 
1033 template <typename U1,
1034  typename T1>
1035 EventId
1036 Simulator::ScheduleNow (void (*f)(U1), T1 a1)
1037 {
1038  return DoScheduleNow (MakeEvent (f, a1));
1039 }
1040 
1041 template <typename U1, typename U2,
1042  typename T1, typename T2>
1043 EventId
1044 Simulator::ScheduleNow (void (*f)(U1,U2), T1 a1, T2 a2)
1045 {
1046  return DoScheduleNow (MakeEvent (f, a1, a2));
1047 }
1048 
1049 template <typename U1, typename U2, typename U3,
1050  typename T1, typename T2, typename T3>
1051 EventId
1052 Simulator::ScheduleNow (void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
1053 {
1054  return DoScheduleNow (MakeEvent (f, a1, a2, a3));
1055 }
1056 
1057 template <typename U1, typename U2, typename U3, typename U4,
1058  typename T1, typename T2, typename T3, typename T4>
1059 EventId
1060 Simulator::ScheduleNow (void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
1061 {
1062  return DoScheduleNow (MakeEvent (f, a1, a2, a3, a4));
1063 }
1064 
1065 template <typename U1, typename U2, typename U3, typename U4, typename U5,
1066  typename T1, typename T2, typename T3, typename T4, typename T5>
1067 EventId
1068 Simulator::ScheduleNow (void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1069 {
1070  return DoScheduleNow (MakeEvent (f, a1, a2, a3, a4, a5));
1071 }
1072 
1073 
1074 
1075 template <typename MEM, typename OBJ>
1076 EventId
1077 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj)
1078 {
1079  return DoScheduleDestroy (MakeEvent (mem_ptr, obj));
1080 }
1081 
1082 
1083 template <typename MEM, typename OBJ,
1084  typename T1>
1085 EventId
1086 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1)
1087 {
1088  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1));
1089 }
1090 
1091 template <typename MEM, typename OBJ,
1092  typename T1, typename T2>
1093 EventId
1094 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
1095 {
1096  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1, a2));
1097 }
1098 
1099 template <typename MEM, typename OBJ,
1100  typename T1, typename T2, typename T3>
1101 EventId
1102 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
1103 {
1104  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1, a2, a3));
1105 }
1106 
1107 template <typename MEM, typename OBJ,
1108  typename T1, typename T2, typename T3, typename T4>
1109 EventId
1110 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4)
1111 {
1112  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
1113 }
1114 
1115 template <typename MEM, typename OBJ,
1116  typename T1, typename T2, typename T3, typename T4, typename T5>
1117 EventId
1118 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj,
1119  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1120 {
1121  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
1122 }
1123 
1124 template <typename U1,
1125  typename T1>
1126 EventId
1127 Simulator::ScheduleDestroy (void (*f)(U1), T1 a1)
1128 {
1129  return DoScheduleDestroy (MakeEvent (f, a1));
1130 }
1131 
1132 template <typename U1, typename U2,
1133  typename T1, typename T2>
1134 EventId
1135 Simulator::ScheduleDestroy (void (*f)(U1,U2), T1 a1, T2 a2)
1136 {
1137  return DoScheduleDestroy (MakeEvent (f, a1, a2));
1138 }
1139 
1140 template <typename U1, typename U2, typename U3,
1141  typename T1, typename T2, typename T3>
1142 EventId
1143 Simulator::ScheduleDestroy (void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
1144 {
1145  return DoScheduleDestroy (MakeEvent (f, a1, a2, a3));
1146 }
1147 
1148 template <typename U1, typename U2, typename U3, typename U4,
1149  typename T1, typename T2, typename T3, typename T4>
1150 EventId
1151 Simulator::ScheduleDestroy (void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
1152 {
1153  return DoScheduleDestroy (MakeEvent (f, a1, a2, a3, a4));
1154 }
1155 
1156 template <typename U1, typename U2, typename U3, typename U4, typename U5,
1157  typename T1, typename T2, typename T3, typename T4, typename T5>
1158 EventId
1159 Simulator::ScheduleDestroy (void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1160 {
1161  return DoScheduleDestroy (MakeEvent (f, a1, a2, a3, a4, a5));
1162 }
1163 
1164 } // namespace ns3
1165 
1166 #endif /* SIMULATOR_H */
static Time GetDelayLeft(const EventId &id)
Definition: simulator.cc:189
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:79
smart pointer class similar to boost::intrusive_ptr
Definition: ptr.h:60
Control the scheduling of simulation events.
Definition: simulator.h:63
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:825
static void ScheduleWithContext(uint32_t context, Time const &time, MEM mem_ptr, OBJ obj)
Schedule an event with the given context.
Definition: simulator.h:905
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:986
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:1077
static Time GetMaximumSimulationTime(void)
Definition: simulator.cc:293