SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MSE3Collector.h
Go to the documentation of this file.
1 /****************************************************************************/
10 // A detector of vehicles passing an area between entry/exit points
11 /****************************************************************************/
12 // SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
13 // Copyright (C) 2003-2014 DLR (http://www.dlr.de/) and contributors
14 /****************************************************************************/
15 //
16 // This file is part of SUMO.
17 // SUMO is free software: you can redistribute it and/or modify
18 // it under the terms of the GNU General Public License as published by
19 // the Free Software Foundation, either version 3 of the License, or
20 // (at your option) any later version.
21 //
22 /****************************************************************************/
23 #ifndef MSE3Collector_h
24 #define MSE3Collector_h
25 
26 
27 // ===========================================================================
28 // included modules
29 // ===========================================================================
30 #ifdef _MSC_VER
31 #include <windows_config.h>
32 #else
33 #include <config.h>
34 #endif
35 
36 #include <string>
37 #include <vector>
38 #include <limits>
41 #include <utils/common/Named.h>
44 
45 
46 // ===========================================================================
47 // class declarations
48 // ===========================================================================
49 class SUMOVehicle;
50 class OutputDevice;
51 
52 
53 // ===========================================================================
54 // class definitions
55 // ===========================================================================
66 public:
72  public:
78  MSE3EntryReminder(const MSCrossSection& crossSection, MSE3Collector& collector);
79 
80 
83 
99  bool notifyMove(SUMOVehicle& veh, SUMOReal , SUMOReal newPos, SUMOReal);
100 
101 
112  bool notifyLeave(SUMOVehicle& veh, SUMOReal lastPos, MSMoveReminder::Notification reason);
114 
115 
116  private:
119 
122 
123  private:
126 
129 
130  };
131 
132 
133 
139  public:
145  MSE3LeaveReminder(const MSCrossSection& crossSection, MSE3Collector& collector);
146 
147 
149 
150 
166  bool notifyMove(SUMOVehicle& veh, SUMOReal oldPos, SUMOReal newPos, SUMOReal);
167 
177  bool notifyLeave(SUMOVehicle& veh, SUMOReal lastPos, MSMoveReminder::Notification reason);
179 
180 
181  private:
184 
187 
188  private:
191 
194 
195  };
196 
197 
208  MSE3Collector(const std::string& id,
209  const CrossSectionVector& entries, const CrossSectionVector& exits,
210  SUMOReal haltingSpeedThreshold,
211  SUMOTime haltingTimeThreshold);
212 
213 
215  virtual ~MSE3Collector();
216 
217 
220  void reset();
221 
222 
230  void enter(SUMOVehicle& veh, SUMOReal entryTimestep);
231 
232 
240  void leave(SUMOVehicle& veh, SUMOReal leaveTimestep);
241 
242 
245 
253 
254 
262 
263 
267  SUMOReal getVehiclesWithin() const;
268 
269 
274  std::vector<std::string> getCurrentVehicleIDs() const;
276 
277 
280 
289  void writeXMLOutput(OutputDevice& dev, SUMOTime startTime, SUMOTime stopTime);
290 
291 
300  void writeXMLDetectorProlog(OutputDevice& dev) const;
302 
303 
304 
313  void detectorUpdate(const SUMOTime step);
314 
315 
316 protected:
319 
322 
324  std::vector<MSE3EntryReminder*> myEntryReminders;
325 
327  std::vector<MSE3LeaveReminder*> myLeaveReminders;
328 
329 
330  // @brief Time-threshold to determine if a vehicle is halting.
332 
335 
344  struct E3Values {
352  unsigned haltings;
360  bool hadUpdate;
361  };
362 
364  std::map<SUMOVehicle*, E3Values> myEnteredContainer;
365 
367  std::map<SUMOVehicle*, E3Values> myLeftContainer;
368 
369 
372 
375 
378 
386 
387 
390 
391 
392 private:
395 
398 
399 
400 };
401 
402 
403 #endif
404 
405 /****************************************************************************/
406