+ signal_train_added.emit(*t);
+ }
+}
+
+void TrafficManager::tick()
+{
+ Time::TimeStamp t = Time::now();
+ Time::TimeDelta dt;
+ if(last_tick)
+ dt = t-last_tick;
+ last_tick = t;
+
+ for(list<Train *>::iterator i=trains.begin(); i!=trains.end(); ++i)
+ (*i)->tick(t, dt);
+}
+
+void TrafficManager::save(const string &fn) const
+{
+ IO::BufferedFile out(fn, IO::M_WRITE);
+ DataFile::Writer writer(out);
+ for(list<Train *>::const_iterator i=trains.begin(); i!=trains.end(); ++i)
+ {
+ const Locomotive &loco = (*i)->get_locomotive();
+ DataFile::Statement st("train");
+ st.append(loco.get_type().get_article_number());
+ st.append(loco.get_address());
+ (*i)->save(st.sub);
+ writer.write(st);
+ }
+}
+
+void TrafficManager::turnout_path_changed(unsigned, Turnout *)
+{
+}
+
+
+TrafficManager::Loader::Loader(TrafficManager &tm):
+ DataFile::BasicLoader<TrafficManager>(tm)
+{
+ add("train", &Loader::train);