Line data Source code
1 : /****************************************************************************/ 2 : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo 3 : // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others. 4 : // This program and the accompanying materials are made available under the 5 : // terms of the Eclipse Public License 2.0 which is available at 6 : // https://www.eclipse.org/legal/epl-2.0/ 7 : // This Source Code may also be made available under the following Secondary 8 : // Licenses when the conditions for such availability set forth in the Eclipse 9 : // Public License 2.0 are satisfied: GNU General Public License, version 2 10 : // or later which is available at 11 : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html 12 : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later 13 : /****************************************************************************/ 14 : /// @file MSStopOut.h 15 : /// @author Jakob Erdmann 16 : /// @date Wed, 21.12.2016 17 : /// 18 : // Ouput information about planned vehicle stop 19 : /****************************************************************************/ 20 : #pragma once 21 : #include <config.h> 22 : 23 : #include <map> 24 : #include <utils/common/SUMOTime.h> 25 : #include <utils/vehicle/SUMOVehicleParameter.h> 26 : 27 : 28 : // =========================================================================== 29 : // class declarations 30 : // =========================================================================== 31 : class OutputDevice; 32 : class SUMOVehicle; 33 : 34 : 35 : // =========================================================================== 36 : // class definitions 37 : // =========================================================================== 38 : /** 39 : * @class MSStopOut 40 : * @brief Realises dumping the complete network state 41 : * 42 : * The class offers a static method, which writes the complete dump of 43 : * the given network into the given OutputDevice. 44 : * 45 : * @todo consider error-handling on write (using IOError) 46 : */ 47 : class MSStopOut { 48 : public: 49 : 50 : /** @brief Static intialization 51 : */ 52 : static void init(); 53 : 54 : static bool active() { 55 164132 : return myInstance != 0; 56 : } 57 : 58 : static void cleanup(); 59 : 60 : static MSStopOut* getInstance() { 61 167 : return myInstance; 62 : } 63 : 64 : /// @brief constructor. 65 : MSStopOut(OutputDevice& dev); 66 : 67 : /// @brief Destructor. 68 : virtual ~MSStopOut(); 69 : 70 : void stopStarted(const SUMOVehicle* veh, int numPersons, int numContainers, SUMOTime time); 71 : 72 : void loadedPersons(const SUMOVehicle* veh, int n); 73 : void unloadedPersons(const SUMOVehicle* veh, int n); 74 : 75 : void loadedContainers(const SUMOVehicle* veh, int n); 76 : void unloadedContainers(const SUMOVehicle* veh, int n); 77 : 78 : void stopEnded(const SUMOVehicle* veh, const SUMOVehicleParameter::Stop& stop, const std::string& laneOrEdgeID, bool simEnd = false); 79 : 80 : /// @brief generate output for vehicles which are still stopped at simulation end 81 : void generateOutputForUnfinished(); 82 : 83 : private: 84 : struct StopInfo { 85 : 86 5428 : StopInfo(int numPersons, int numContainers) : 87 5428 : initialNumPersons(numPersons), 88 5428 : loadedPersons(0), 89 5428 : unloadedPersons(0), 90 5428 : initialNumContainers(numContainers), 91 5428 : loadedContainers(0), 92 5428 : unloadedContainers(0) { 93 : } 94 : 95 : int initialNumPersons; 96 : int loadedPersons; 97 : int unloadedPersons; 98 : int initialNumContainers; 99 : int loadedContainers; 100 : int unloadedContainers; 101 : }; 102 : 103 : std::map<const SUMOVehicle*, StopInfo, ComparatorNumericalIdLess> myStopped; 104 : 105 : OutputDevice& myDevice; 106 : 107 : static MSStopOut* myInstance; 108 : 109 : /// @brief Invalidated copy constructor. 110 : MSStopOut(const MSStopOut&); 111 : 112 : /// @brief Invalidated assignment operator. 113 : MSStopOut& operator=(const MSStopOut&); 114 : 115 : 116 : };