SUMO - Simulation of Urban MObility
MSBaseVehicle.h
Go to the documentation of this file.
1 /****************************************************************************/
9 // A base class for vehicle implementations
10 /****************************************************************************/
11 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
12 // Copyright (C) 2010-2016 DLR (http://www.dlr.de/) and contributors
13 /****************************************************************************/
14 //
15 // This file is part of SUMO.
16 // SUMO is free software: you can redistribute it and/or modify
17 // it under the terms of the GNU General Public License as published by
18 // the Free Software Foundation, either version 3 of the License, or
19 // (at your option) any later version.
20 //
21 /****************************************************************************/
22 #ifndef MSBaseVehicle_h
23 #define MSBaseVehicle_h
24 
25 
26 // ===========================================================================
27 // included modules
28 // ===========================================================================
29 #ifdef _MSC_VER
30 #include <windows_config.h>
31 #else
32 #include <config.h>
33 #endif
34 
35 #include <iostream>
36 #include <vector>
37 #include <set>
39 #include <utils/common/StdDefs.h>
40 #include "MSRoute.h"
41 #include "MSMoveReminder.h"
42 #include "MSVehicleType.h"
43 
44 
45 // ===========================================================================
46 // class definitions
47 // ===========================================================================
52 class MSBaseVehicle : public SUMOVehicle {
53 public:
54 
55  friend class GUIBaseVehicle;
56 
64  MSBaseVehicle(SUMOVehicleParameter* pars, const MSRoute* route,
65  const MSVehicleType* type, const SUMOReal speedFactor);
66 
67 
69  virtual ~MSBaseVehicle();
70 
71 
73  const std::string& getID() const;
74 
79  const SUMOVehicleParameter& getParameter() const;
80 
81 
85  inline const MSRoute& getRoute() const {
86  return *myRoute;
87  }
88 
89 
93  inline const MSVehicleType& getVehicleType() const {
94  return *myType;
95  }
96 
97 
101  inline SUMOVehicleClass getVClass() const {
102  return myType->getParameter().vehicleClass;
103  }
104 
108  SUMOReal getMaxSpeed() const;
109 
110 
118  const MSEdge* succEdge(unsigned int nSuccs) const;
119 
124  const MSEdge* getEdge() const;
125 
126 
130  virtual bool isOnRoad() const {
131  return true;
132  }
133 
134 
140  virtual const MSEdge* getRerouteOrigin() const {
141  return *myCurrEdge;
142  }
143 
144 
149  return myCurrEdge;
150  }
151 
152 
162  void reroute(SUMOTime t, SUMOAbstractRouter<MSEdge, SUMOVehicle>& router, const bool onInit = false, const bool withTaz = false);
163 
164 
175  bool replaceRouteEdges(ConstMSEdgeVector& edges, bool onInit = false);
176 
177 
183  virtual SUMOReal getAcceleration() const;
184 
190  virtual SUMOReal getSlope() const;
191 
197  void onDepart();
198 
202  inline SUMOTime getDeparture() const {
203  return myDeparture;
204  }
205 
208  return getDeparture() - getParameter().depart;
209  }
210 
211 
215  inline SUMOReal getDepartPos() const {
216  return myDepartPos;
217  }
218 
223  virtual SUMOReal getArrivalPos() const {
224  return myArrivalPos;
225  }
226 
229  virtual void setArrivalPos(SUMOReal arrivalPos) {
230  myArrivalPos = arrivalPos;
231  }
232 
235  bool hasDeparted() const;
236 
240  virtual bool hasArrived() const;
241 
245  inline unsigned int getNumberReroutes() const {
246  return myNumberReroutes;
247  }
248 
250  SUMOReal getImpatience() const;
251 
252 
256  inline const std::vector<MSDevice*>& getDevices() const {
257  return myDevices;
258  }
259 
266  virtual void addPerson(MSTransportable* person);
267 
268 
275  virtual void addContainer(MSTransportable* container);
276 
281  bool hasValidRoute(std::string& msg) const;
282 
288  void addReminder(MSMoveReminder* rem);
289 
295  void removeReminder(MSMoveReminder* rem);
296 
307  virtual void activateReminders(const MSMoveReminder::Notification reason);
308 
313  return myChosenSpeedFactor;
314  }
315 
319  inline void setChosenSpeedFactor(const SUMOReal factor) {
320  myChosenSpeedFactor = factor;
321  }
322 
324  MSDevice* getDevice(const std::type_info& type) const;
325 
326 
328 
329 
331  virtual void saveState(OutputDevice& out);
332 
334 
342  void addStops(const bool ignoreStopErrors);
343 
344 
345 protected:
348  void calculateArrivalParams();
349 
352  virtual const ConstMSEdgeVector getStopEdges() const = 0;
353 
354 protected:
357 
359  const MSRoute* myRoute;
360 
363 
366 
369 
370 
373 
375  typedef std::vector< std::pair<MSMoveReminder*, SUMOReal> > MoveReminderCont;
376 
378  MoveReminderCont myMoveReminders;
380 
382  std::vector<MSDevice*> myDevices;
383 
386 
389 
392 
395 
397  unsigned int myNumberReroutes;
398 
399  /* @brief magic value for undeparted vehicles
400  * @note: in previous versions this was -1
401  */
403 
404 private:
407 
408 
409 #ifdef _DEBUG
410 public:
411  static void initMoveReminderOutput(const OptionsCont& oc);
412 
413 protected:
415  void traceMoveReminder(const std::string& type, MSMoveReminder* rem, SUMOReal pos, bool keep) const;
416 
418  const bool myTraceMoveReminders;
419 private:
421  static std::set<std::string> myShallTraceMoveReminders;
422 #endif
423 
424 
425 };
426 
427 #endif
428 
429 /****************************************************************************/
void removeReminder(MSMoveReminder *rem)
Removes a MoveReminder dynamically.
const MSVehicleType * myType
This Vehicle&#39;s type.
MSDevice * getDevice(const std::type_info &type) const
Returns a device of the given type if it exists or 0.
long long int SUMOTime
Definition: SUMOTime.h:43
unsigned int getNumberReroutes() const
Returns the number of new routes this vehicle got.
MoveReminderCont myMoveReminders
Current lane&#39;s move reminder.
SUMOReal myArrivalPos
The position on the destination lane where the vehicle stops.
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types...
SUMOReal getDepartPos() const
Returns this vehicle&#39;s real departure position.
SUMOReal getMaxSpeed() const
Returns the maximum speed.
SUMOVehicleClass getVClass() const
Returns the vehicle&#39;s access class.
SUMOReal getImpatience() const
Returns this vehicles impatience.
const MSRouteIterator & getCurrentRouteEdge() const
Returns an iterator pointing to the current edge in this vehicles route.
Notification
Definition of a vehicle state.
virtual bool isOnRoad() const
Returns the information whether the vehicle is on a road (is simulated)
SUMOVehicleClass vehicleClass
The vehicle&#39;s class.
const MSRoute & getRoute() const
Returns the current route.
Definition: MSBaseVehicle.h:85
virtual ~MSBaseVehicle()
Destructor.
const MSRoute * myRoute
This Vehicle&#39;s route.
unsigned int myNumberReroutes
The number of reroutings.
bool hasDeparted() const
Returns whether this vehicle has already departed.
std::vector< const MSEdge * > ConstMSEdgeVector
Definition: MSEdge.h:78
int myArrivalLane
The destination lane where the vehicle stops.
const SUMOVehicleParameter * myParameter
This Vehicle&#39;s parameter.
The base class for microscopic and mesoscopic vehicles.
Definition: MSBaseVehicle.h:52
MSBaseVehicle(SUMOVehicleParameter *pars, const MSRoute *route, const MSVehicleType *type, const SUMOReal speedFactor)
Constructor.
The car-following model and parameter.
Definition: MSVehicleType.h:74
virtual void saveState(OutputDevice &out)
Saves the (common) state of a vehicle.
std::vector< std::pair< MSMoveReminder *, SUMOReal > > MoveReminderCont
Definition of a move reminder container.
void calculateArrivalParams()
(Re-)Calculates the arrival position and lane from the vehicle parameters
A road/street connecting two junctions.
Definition: MSEdge.h:80
virtual void addPerson(MSTransportable *person)
Adds a person to this vehicle.
const SUMOVTypeParameter & getParameter() const
Representation of a vehicle.
Definition: SUMOVehicle.h:65
void setChosenSpeedFactor(const SUMOReal factor)
Returns the precomputed factor by which the driver wants to be faster than the speed limit...
virtual SUMOReal getAcceleration() const
Returns the vehicle&#39;s acceleration.
SUMOTime getDepartDelay() const
Returns the depart delay.
MSBaseVehicle & operator=(const MSBaseVehicle &s)
invalidated assignment operator
const MSEdge * succEdge(unsigned int nSuccs) const
Returns the nSuccs&#39;th successor of edge the vehicle is currently at.
ConstMSEdgeVector::const_iterator MSRouteIterator
Definition: MSRoute.h:65
SUMOTime depart
The vehicle&#39;s departure time.
A MSVehicle extended by some values for usage within the gui.
virtual void setArrivalPos(SUMOReal arrivalPos)
Sets this vehicle&#39;s desired arrivalPos for its current route.
virtual const ConstMSEdgeVector getStopEdges() const =0
Returns the list of still pending stop edges.
Something on a lane to be noticed about vehicle movement.
bool replaceRouteEdges(ConstMSEdgeVector &edges, bool onInit=false)
Replaces the current route by the given edges.
Abstract in-vehicle device.
Definition: MSDevice.h:69
SUMOReal myChosenSpeedFactor
A precomputed factor by which the driver wants to be faster than the speed limit. ...
void addStops(const bool ignoreStopErrors)
Adds stops to the built vehicle.
Structure representing possible vehicle parameter.
virtual void activateReminders(const MSMoveReminder::Notification reason)
"Activates" all current move reminder
void onDepart()
Called when the vehicle is inserted into the network.
A storage for options typed value containers)
Definition: OptionsCont.h:108
const MSVehicleType & getVehicleType() const
Returns the vehicle&#39;s type definition.
Definition: MSBaseVehicle.h:93
virtual bool hasArrived() const
Returns whether this vehicle has already arived (by default this is true if the vehicle has reached i...
virtual const MSEdge * getRerouteOrigin() const
Returns the starting point for reroutes (usually the current edge)
SUMOReal getChosenSpeedFactor() const
Returns the precomputed factor by which the driver wants to be faster than the speed limit...
const SUMOVehicleParameter & getParameter() const
Returns the vehicle&#39;s parameter (including departure definition)
bool hasValidRoute(std::string &msg) const
Validates the current route.
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:71
#define SUMOReal
Definition: config.h:213
MSRouteIterator myCurrEdge
Iterator to current route-edge.
void reroute(SUMOTime t, SUMOAbstractRouter< MSEdge, SUMOVehicle > &router, const bool onInit=false, const bool withTaz=false)
Performs a rerouting using the given router.
const MSEdge * getEdge() const
Returns the edge the vehicle is currently at.
SUMOTime getDeparture() const
Returns this vehicle&#39;s real departure time.
virtual SUMOReal getArrivalPos() const
Returns this vehicle&#39;s desired arrivalPos for its current route (may change on reroute) ...
virtual SUMOReal getSlope() const
Returns the slope of the road at vehicle&#39;s position.
SUMOReal myDepartPos
The real depart position.
void addReminder(MSMoveReminder *rem)
Adds a MoveReminder dynamically.
std::vector< MSDevice * > myDevices
The devices this vehicle has.
virtual void addContainer(MSTransportable *container)
Adds a container to this vehicle.
const std::vector< MSDevice * > & getDevices() const
Returns this vehicle&#39;s devices.
SUMOTime myDeparture
The real departure time.
static const SUMOTime NOT_YET_DEPARTED
const std::string & getID() const
Returns the name of the vehicle.