Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <algorithm>
00025 #include "event_list.h"
00026 #include "event_handler.h"
00027
00028
00029 new_event event_list::instanciate_event[MAX_EVENTS];
00030
00031
00032 event_list::event_list ()
00033 {
00034 Paused = false;
00035 }
00036
00037
00038 event_list::~event_list ()
00039 {
00040 clear ();
00041 }
00042
00043
00044 void event_list::clear ()
00045 {
00046 event *ev;
00047
00048 while (!Events.empty ())
00049 {
00050 ev = Events.back ();
00051 ev->set_list (NULL);
00052 Events.pop_back ();
00053 delete ev;
00054 }
00055 }
00056
00057
00058 void event_list::add_event (event* ev)
00059 {
00060 ev->set_list (this);
00061 Events.push_back (ev);
00062
00063
00064 if (Paused) ev->pause ();
00065
00066
00067 else if (!ev->is_paused ()) event_handler::register_event (ev);
00068 }
00069
00070
00071 void event_list::remove_event (event *ev)
00072 {
00073 vector<event*>::iterator i;
00074
00075
00076 i = find (Events.begin (), Events.end (), ev);
00077
00078
00079 if (i != Events.end ()) Events.erase (i);
00080 }
00081
00082
00083 event *event_list::get_event (const string & id)
00084 {
00085 vector<event*>::iterator i;
00086
00087 for (i = Events.begin (); i != Events.end (); i++)
00088 if ((*i)->id () == id) return *i;
00089
00090 return NULL;
00091 }
00092
00093
00094 void event_list::pause ()
00095 {
00096 Paused = true;
00097 for (vector<event*>::iterator i = Events.begin (); i != Events.end (); i++)
00098 (*i)->pause ();
00099 }
00100
00101
00102 void event_list::resume ()
00103 {
00104 Paused = false;
00105 for (vector<event*>::iterator i = Events.begin (); i != Events.end (); i++)
00106 (*i)->resume ();
00107 }
00108
00109
00110 void event_list::register_event (u_int8 type, new_event e)
00111 {
00112 if (type < MAX_EVENTS)
00113 instanciate_event[type] = e;
00114 }
00115
00116
00117 void event_list::put_state (ogzstream& out) const
00118 {
00119 std::vector <event *>::iterator i;
00120 u_int32 nbr_events = Events.size ();
00121
00122 nbr_events >> out;
00123
00124 for (i = Events.begin (); i != Events.end (); i++)
00125 (*i)->put_state (out);
00126 }
00127
00128
00129 bool event_list::get_state (igzstream& in)
00130 {
00131 u_int32 nbr_events;
00132 u_int8 type;
00133 event *ev;
00134
00135 nbr_events << in;
00136
00137 while (nbr_events--)
00138 {
00139 ev = NULL;
00140 type << in;
00141
00142
00143 if (type < MAX_EVENTS && instanciate_event[type] != NULL)
00144 ev = instanciate_event[type]();
00145
00146
00147 if (ev != NULL && ev->get_state (in))
00148 add_event (ev);
00149
00150
00151 else
00152 {
00153 fprintf (stderr, "Could not load event #%i. Aborting ...\n", type);
00154 return false;
00155 }
00156 }
00157
00158 return true;
00159 }