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 
70 class Simulator
71 {
72 public:
85  static void SetImplementation (Ptr<SimulatorImpl> impl);
86 
105 
113  static void SetScheduler (ObjectFactory schedulerFactory);
114 
116  static void Destroy (void);
117 
119  static bool IsFinished (void);
120 
122  static void Run (void);
123 
125  static void Stop (void);
126 
128  static void Stop (Time const &time);
129 
148  template <typename MEM, typename OBJ>
149  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj);
150 
158  template <typename MEM, typename OBJ, typename T1>
159  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1);
160 
169  template <typename MEM, typename OBJ, typename T1, typename T2>
170  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
171 
181  template <typename MEM, typename OBJ,
182  typename T1, typename T2, typename T3>
183  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
184 
195  template <typename MEM, typename OBJ,
196  typename T1, typename T2, typename T3, typename T4>
197  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4);
198 
210  template <typename MEM, typename OBJ,
211  typename T1, typename T2, typename T3, typename T4, typename T5>
212  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj,
213  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
219  static EventId Schedule (Time const &time, void (*f)(void));
220 
227  template <typename U1, typename T1>
228  static EventId Schedule (Time const &time, void (*f)(U1), T1 a1);
229 
237  template <typename U1, typename U2, typename T1, typename T2>
238  static EventId Schedule (Time const &time, void (*f)(U1,U2), T1 a1, T2 a2);
239 
248  template <typename U1, typename U2, typename U3, typename T1, typename T2, typename T3>
249  static EventId Schedule (Time const &time, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
250 
260  template <typename U1, typename U2, typename U3, typename U4,
261  typename T1, typename T2, typename T3, typename T4>
262  static EventId Schedule (Time const &time, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
263 
274  template <typename U1, typename U2, typename U3, typename U4, typename U5,
275  typename T1, typename T2, typename T3, typename T4, typename T5>
276  static EventId Schedule (Time const &time, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
277 
296  template <typename MEM, typename OBJ>
297  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj);
298 
308  template <typename MEM, typename OBJ, typename T1>
309  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1);
310 
321  template <typename MEM, typename OBJ, typename T1, typename T2>
322  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
323 
335  template <typename MEM, typename OBJ,
336  typename T1, typename T2, typename T3>
337  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
338 
351  template <typename MEM, typename OBJ,
352  typename T1, typename T2, typename T3, typename T4>
353  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4);
354 
368  template <typename MEM, typename OBJ,
369  typename T1, typename T2, typename T3, typename T4, typename T5>
370  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj,
371  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
379  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(void));
380 
389  template <typename U1, typename T1>
390  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1), T1 a1);
391 
401  template <typename U1, typename U2, typename T1, typename T2>
402  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2), T1 a1, T2 a2);
403 
414  template <typename U1, typename U2, typename U3, typename T1, typename T2, typename T3>
415  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
416 
428  template <typename U1, typename U2, typename U3, typename U4,
429  typename T1, typename T2, typename T3, typename T4>
430  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
431 
444  template <typename U1, typename U2, typename U3, typename U4, typename U5,
445  typename T1, typename T2, typename T3, typename T4, typename T5>
446  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);
447 
463  template <typename MEM, typename OBJ>
464  static EventId ScheduleNow (MEM mem_ptr, OBJ obj);
465 
472  template <typename MEM, typename OBJ,
473  typename T1>
474  static EventId ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1);
475 
483  template <typename MEM, typename OBJ,
484  typename T1, typename T2>
485  static EventId ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
486 
495  template <typename MEM, typename OBJ,
496  typename T1, typename T2, typename T3>
497  static EventId ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
498 
508  template <typename MEM, typename OBJ,
509  typename T1, typename T2, typename T3, typename T4>
510  static EventId ScheduleNow (MEM mem_ptr, OBJ obj,
511  T1 a1, T2 a2, T3 a3, T4 a4);
522  template <typename MEM, typename OBJ,
523  typename T1, typename T2, typename T3, typename T4, typename T5>
524  static EventId ScheduleNow (MEM mem_ptr, OBJ obj,
525  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
530  static EventId ScheduleNow (void (*f)(void));
531 
537  template <typename U1,
538  typename T1>
539  static EventId ScheduleNow (void (*f)(U1), T1 a1);
540 
547  template <typename U1, typename U2,
548  typename T1, typename T2>
549  static EventId ScheduleNow (void (*f)(U1,U2), T1 a1, T2 a2);
550 
558  template <typename U1, typename U2, typename U3,
559  typename T1, typename T2, typename T3>
560  static EventId ScheduleNow (void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
561 
570  template <typename U1, typename U2, typename U3, typename U4,
571  typename T1, typename T2, typename T3, typename T4>
572  static EventId ScheduleNow (void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
573 
583  template <typename U1, typename U2, typename U3, typename U4, typename U5,
584  typename T1, typename T2, typename T3, typename T4, typename T5>
585  static EventId ScheduleNow (void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
586 
603  template <typename MEM, typename OBJ>
604  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj);
605 
612  template <typename MEM, typename OBJ,
613  typename T1>
614  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1);
615 
623  template <typename MEM, typename OBJ,
624  typename T1, typename T2>
625  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
626 
635  template <typename MEM, typename OBJ,
636  typename T1, typename T2, typename T3>
637  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
638 
648  template <typename MEM, typename OBJ,
649  typename T1, typename T2, typename T3, typename T4>
650  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj,
651  T1 a1, T2 a2, T3 a3, T4 a4);
662  template <typename MEM, typename OBJ,
663  typename T1, typename T2, typename T3, typename T4, typename T5>
664  static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj,
665  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
670  static EventId ScheduleDestroy (void (*f)(void));
671 
677  template <typename U1,
678  typename T1>
679  static EventId ScheduleDestroy (void (*f)(U1), T1 a1);
680 
687  template <typename U1, typename U2,
688  typename T1, typename T2>
689  static EventId ScheduleDestroy (void (*f)(U1,U2), T1 a1, T2 a2);
690 
698  template <typename U1, typename U2, typename U3,
699  typename T1, typename T2, typename T3>
700  static EventId ScheduleDestroy (void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
701 
710  template <typename U1, typename U2, typename U3, typename U4,
711  typename T1, typename T2, typename T3, typename T4>
712  static EventId ScheduleDestroy (void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
713 
723  template <typename U1, typename U2, typename U3, typename U4, typename U5,
724  typename T1, typename T2, typename T3, typename T4, typename T5>
725  static EventId ScheduleDestroy (void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
726 
730  static void Remove (const EventId &id);
731 
733  static void Cancel (const EventId &id);
734 
736  static bool IsExpired (const EventId &id);
737 
739  static Time Now (void);
740 
742  static Time GetDelayLeft (const EventId &id);
743 
745  static Time GetMaximumSimulationTime (void);
746 
748  static uint32_t GetContext (void);
749 
751  static EventId Schedule (Time const &time, const Ptr<EventImpl> &event);
752 
756  static void ScheduleWithContext (uint32_t context, const Time &time, EventImpl *event);
757 
759  static EventId ScheduleDestroy (const Ptr<EventImpl> &event);
760 
762  static EventId ScheduleNow (const Ptr<EventImpl> &event);
763 
765  static uint32_t GetSystemId (void);
766 
767 private:
769  Simulator ();
771  ~Simulator ();
772 
779  static EventId DoSchedule (Time const &time, EventImpl *event);
785  static EventId DoScheduleNow (EventImpl *event);
791  static EventId DoScheduleDestroy (EventImpl *event);
792 };
793 
807 Time Now (void);
808 
809 } // namespace ns3
810 
811 
812 /********************************************************************
813  * Implementation of the templates declared above.
814  ********************************************************************/
815 
816 namespace ns3 {
817 
818 template <typename MEM, typename OBJ>
819 EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj)
820 {
821  return DoSchedule (time, MakeEvent (mem_ptr, obj));
822 }
823 
824 
825 template <typename MEM, typename OBJ,
826  typename T1>
827 EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1)
828 {
829  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1));
830 }
831 
832 template <typename MEM, typename OBJ,
833  typename T1, typename T2>
834 EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
835 {
836  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1, a2));
837 }
838 
839 template <typename MEM, typename OBJ,
840  typename T1, typename T2, typename T3>
841 EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
842 {
843  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1, a2, a3));
844 }
845 
846 template <typename MEM, typename OBJ,
847  typename T1, typename T2, typename T3, typename T4>
848 EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4)
849 {
850  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
851 }
852 
853 template <typename MEM, typename OBJ,
854  typename T1, typename T2, typename T3, typename T4, typename T5>
855 EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj,
856  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
857 {
858  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
859 }
860 
861 template <typename U1, typename T1>
862 EventId Simulator::Schedule (Time const &time, void (*f)(U1), T1 a1)
863 {
864  return DoSchedule (time, MakeEvent (f, a1));
865 }
866 
867 template <typename U1, typename U2,
868  typename T1, typename T2>
869 EventId Simulator::Schedule (Time const &time, void (*f)(U1,U2), T1 a1, T2 a2)
870 {
871  return DoSchedule (time, MakeEvent (f, a1, a2));
872 }
873 
874 template <typename U1, typename U2, typename U3,
875  typename T1, typename T2, typename T3>
876 EventId Simulator::Schedule (Time const &time, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
877 {
878  return DoSchedule (time, MakeEvent (f, a1, a2, a3));
879 }
880 
881 template <typename U1, typename U2, typename U3, typename U4,
882  typename T1, typename T2, typename T3, typename T4>
883 EventId Simulator::Schedule (Time const &time, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
884 {
885  return DoSchedule (time, MakeEvent (f, a1, a2, a3, a4));
886 }
887 
888 template <typename U1, typename U2, typename U3, typename U4, typename U5,
889  typename T1, typename T2, typename T3, typename T4, typename T5>
890 EventId Simulator::Schedule (Time const &time, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
891 {
892  return DoSchedule (time, MakeEvent (f, a1, a2, a3, a4, a5));
893 }
894 
895 
896 
897 
898 template <typename MEM, typename OBJ>
899 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj)
900 {
901  ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj));
902 }
903 
904 
905 template <typename MEM, typename OBJ,
906  typename T1>
907 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1)
908 {
909  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1));
910 }
911 
912 template <typename MEM, typename OBJ,
913  typename T1, typename T2>
914 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
915 {
916  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1, a2));
917 }
918 
919 template <typename MEM, typename OBJ,
920  typename T1, typename T2, typename T3>
921 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
922 {
923  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1, a2, a3));
924 }
925 
926 template <typename MEM, typename OBJ,
927  typename T1, typename T2, typename T3, typename T4>
928 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4)
929 {
930  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
931 }
932 
933 template <typename MEM, typename OBJ,
934  typename T1, typename T2, typename T3, typename T4, typename T5>
935 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj,
936  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
937 {
938  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
939 }
940 
941 template <typename U1, typename T1>
942 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1), T1 a1)
943 {
944  return ScheduleWithContext (context, time, MakeEvent (f, a1));
945 }
946 
947 template <typename U1, typename U2,
948  typename T1, typename T2>
949 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2), T1 a1, T2 a2)
950 {
951  return ScheduleWithContext (context, time, MakeEvent (f, a1, a2));
952 }
953 
954 template <typename U1, typename U2, typename U3,
955  typename T1, typename T2, typename T3>
956 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
957 {
958  return ScheduleWithContext (context, time, MakeEvent (f, a1, a2, a3));
959 }
960 
961 template <typename U1, typename U2, typename U3, typename U4,
962  typename T1, typename T2, typename T3, typename T4>
963 void Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
964 {
965  return ScheduleWithContext (context, time, MakeEvent (f, a1, a2, a3, a4));
966 }
967 
968 template <typename U1, typename U2, typename U3, typename U4, typename U5,
969  typename T1, typename T2, typename T3, typename T4, typename T5>
970 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)
971 {
972  return ScheduleWithContext (context, time, MakeEvent (f, a1, a2, a3, a4, a5));
973 }
974 
975 
976 
977 
978 template <typename MEM, typename OBJ>
979 EventId
980 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj)
981 {
982  return DoScheduleNow (MakeEvent (mem_ptr, obj));
983 }
984 
985 
986 template <typename MEM, typename OBJ,
987  typename T1>
988 EventId
989 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1)
990 {
991  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1));
992 }
993 
994 template <typename MEM, typename OBJ,
995  typename T1, typename T2>
996 EventId
997 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
998 {
999  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1, a2));
1000 }
1001 
1002 template <typename MEM, typename OBJ,
1003  typename T1, typename T2, typename T3>
1004 EventId
1005 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
1006 {
1007  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1, a2, a3));
1008 }
1009 
1010 template <typename MEM, typename OBJ,
1011  typename T1, typename T2, typename T3, typename T4>
1012 EventId
1013 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4)
1014 {
1015  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
1016 }
1017 
1018 template <typename MEM, typename OBJ,
1019  typename T1, typename T2, typename T3, typename T4, typename T5>
1020 EventId
1021 Simulator::ScheduleNow (MEM mem_ptr, OBJ obj,
1022  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1023 {
1024  return DoScheduleNow (MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
1025 }
1026 
1027 template <typename U1,
1028  typename T1>
1029 EventId
1030 Simulator::ScheduleNow (void (*f)(U1), T1 a1)
1031 {
1032  return DoScheduleNow (MakeEvent (f, a1));
1033 }
1034 
1035 template <typename U1, typename U2,
1036  typename T1, typename T2>
1037 EventId
1038 Simulator::ScheduleNow (void (*f)(U1,U2), T1 a1, T2 a2)
1039 {
1040  return DoScheduleNow (MakeEvent (f, a1, a2));
1041 }
1042 
1043 template <typename U1, typename U2, typename U3,
1044  typename T1, typename T2, typename T3>
1045 EventId
1046 Simulator::ScheduleNow (void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
1047 {
1048  return DoScheduleNow (MakeEvent (f, a1, a2, a3));
1049 }
1050 
1051 template <typename U1, typename U2, typename U3, typename U4,
1052  typename T1, typename T2, typename T3, typename T4>
1053 EventId
1054 Simulator::ScheduleNow (void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
1055 {
1056  return DoScheduleNow (MakeEvent (f, a1, a2, a3, a4));
1057 }
1058 
1059 template <typename U1, typename U2, typename U3, typename U4, typename U5,
1060  typename T1, typename T2, typename T3, typename T4, typename T5>
1061 EventId
1062 Simulator::ScheduleNow (void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1063 {
1064  return DoScheduleNow (MakeEvent (f, a1, a2, a3, a4, a5));
1065 }
1066 
1067 
1068 
1069 template <typename MEM, typename OBJ>
1070 EventId
1071 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj)
1072 {
1073  return DoScheduleDestroy (MakeEvent (mem_ptr, obj));
1074 }
1075 
1076 
1077 template <typename MEM, typename OBJ,
1078  typename T1>
1079 EventId
1080 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1)
1081 {
1082  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1));
1083 }
1084 
1085 template <typename MEM, typename OBJ,
1086  typename T1, typename T2>
1087 EventId
1088 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
1089 {
1090  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1, a2));
1091 }
1092 
1093 template <typename MEM, typename OBJ,
1094  typename T1, typename T2, typename T3>
1095 EventId
1096 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
1097 {
1098  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1, a2, a3));
1099 }
1100 
1101 template <typename MEM, typename OBJ,
1102  typename T1, typename T2, typename T3, typename T4>
1103 EventId
1104 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4)
1105 {
1106  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
1107 }
1108 
1109 template <typename MEM, typename OBJ,
1110  typename T1, typename T2, typename T3, typename T4, typename T5>
1111 EventId
1112 Simulator::ScheduleDestroy (MEM mem_ptr, OBJ obj,
1113  T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1114 {
1115  return DoScheduleDestroy (MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
1116 }
1117 
1118 template <typename U1,
1119  typename T1>
1120 EventId
1121 Simulator::ScheduleDestroy (void (*f)(U1), T1 a1)
1122 {
1123  return DoScheduleDestroy (MakeEvent (f, a1));
1124 }
1125 
1126 template <typename U1, typename U2,
1127  typename T1, typename T2>
1128 EventId
1129 Simulator::ScheduleDestroy (void (*f)(U1,U2), T1 a1, T2 a2)
1130 {
1131  return DoScheduleDestroy (MakeEvent (f, a1, a2));
1132 }
1133 
1134 template <typename U1, typename U2, typename U3,
1135  typename T1, typename T2, typename T3>
1136 EventId
1137 Simulator::ScheduleDestroy (void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
1138 {
1139  return DoScheduleDestroy (MakeEvent (f, a1, a2, a3));
1140 }
1141 
1142 template <typename U1, typename U2, typename U3, typename U4,
1143  typename T1, typename T2, typename T3, typename T4>
1144 EventId
1145 Simulator::ScheduleDestroy (void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
1146 {
1147  return DoScheduleDestroy (MakeEvent (f, a1, a2, a3, a4));
1148 }
1149 
1150 template <typename U1, typename U2, typename U3, typename U4, typename U5,
1151  typename T1, typename T2, typename T3, typename T4, typename T5>
1152 EventId
1153 Simulator::ScheduleDestroy (void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
1154 {
1155  return DoScheduleDestroy (MakeEvent (f, a1, a2, a3, a4, a5));
1156 }
1157 
1158 } // namespace ns3
1159 
1160 #endif /* SIMULATOR_H */
static Time GetDelayLeft(const EventId &id)
Get the remaining time until this event will execute.
Definition: simulator.cc:232
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:70
ns3::EventImpl declarations.
static void SetImplementation(Ptr< SimulatorImpl > impl)
Definition: simulator.cc:364
static EventId DoScheduleDestroy(EventImpl *event)
Implementation of the various ScheduleDestroy methods.
Definition: simulator.cc:270
static Ptr< SimulatorImpl > GetImplementation(void)
Get the SimulatorImpl singleton.
Definition: simulator.cc:390
static uint32_t GetSystemId(void)
Get the system id of this simulator.
Definition: simulator.cc:349
static uint32_t GetContext(void)
Get the current simulation context.
Definition: simulator.cc:343
ns3::ObjectFactory class declaration.
static void Run(void)
Run the simulation.
Definition: simulator.cc:200
static EventId DoSchedule(Time const &time, EventImpl *event)
Implementation of the various Schedule methods.
Definition: simulator.cc:260
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:311
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:819
ns3::MakeEvent function declarations and template implementation.
Declaration of classes ns3::Time and ns3::TimeWithUnit, and the TimeValue implementation classes...
static void ScheduleWithContext(uint32_t context, Time const &time, MEM mem_ptr, OBJ obj)
Schedule an event with the given context.
Definition: simulator.h:899
~Simulator()
Destructor.
static void Destroy(void)
Execute the events scheduled with ScheduleDestroy().
Definition: simulator.cc:164
static void Remove(const EventId &id)
Remove an event from the event list.
Definition: simulator.cc:301
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:321
Simulator()
Default constructor.
static EventId ScheduleNow(MEM mem_ptr, OBJ obj)
Schedule an event to expire Now.
Definition: simulator.h:980
static void SetScheduler(ObjectFactory schedulerFactory)
Definition: simulator.cc:186
static Time Now(void)
Return the current simulation virtual time.
Definition: simulator.cc:223
Instantiate subclasses of ns3::Object.
A simulation event.
Definition: event-impl.h:44
static EventId DoScheduleNow(EventImpl *event)
Implementation of the various ScheduleNow methods.
Definition: simulator.cc:265
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:208
static bool IsFinished(void)
Check if the simulation should finish.
Definition: simulator.cc:193
static EventId ScheduleDestroy(MEM mem_ptr, OBJ obj)
Schedule an event to expire at Destroy time.
Definition: simulator.h:1071
Time Now(void)
create an ns3::Time instance which contains the current simulation time.
Definition: simulator.cc:330
ns3::EventId declarations.
static Time GetMaximumSimulationTime(void)
Get the maximum representable simulation time.
Definition: simulator.cc:336
EventImpl * MakeEvent(void(*f)(void))
Make an EventImpl from a function pointer taking varying numbers of arguments.
Definition: make-event.cc:34